LeetCode刷題SQL筆記

系列博客目錄


文章目錄

  • 系列博客目錄
  • 1.distinct關鍵字 去除重復
  • 2.char_length()
  • 3.group by 與 count()連用
  • 4.date類型有個函數datediff()
  • 5.mod 函數
  • 6.join和left join的區別
      • 1. **`JOIN`(內連接,`INNER JOIN`)**
        • 示例:
      • 2. **`LEFT JOIN`(左外連接)**
        • 示例:
      • 總結:
      • 用途:
  • 7.AVG函數
      • 1. **`AVG()` 函數的基本用法**
        • 語法:
      • 2. **搭配 `GROUP BY` 使用**
        • 示例 1:計算每個部門的平均薪資
        • 示例 2:計算每個學生的平均成績
      • 3. **不搭配 `GROUP BY` 使用**
        • 示例:計算所有員工的平均薪資
      • 4. **處理 `NULL` 值**
      • 5. **總結**
  • 8.
  • 9.CONCAT UPPER LOWER SUBSTRING
  • 10.


1.distinct關鍵字 去除重復

select distinct author_id as id from Views where author_id = viewer_id order by id;

2.char_length()

select tweet_id from Tweets where char_length(content) > 15;

3.group by 與 count()連用

select customer_id, count(customer_id) as count_no_trans 
from Visits left join Transactions on Visits.visit_id = Transactions.visit_id
where transaction_id is null group by customer_id;

4.date類型有個函數datediff()

select a.id 
from Weather as a cross join Weather as b on datediff(a.recordDate, b.recordDate) = 1
where  a.temperature > b.temperature;

5.mod 函數

select * from cinema where mod(id, 2) = 1 and description != 'boring' order by rating desc;

6.join和left join的區別

在 MySQL 中,JOINLEFT JOIN 都用于將兩個或多個表連接在一起,但它們之間有重要的區別:

1. JOIN(內連接,INNER JOIN

  • 定義JOIN 默認是 INNER JOIN,表示僅返回兩個表中滿足連接條件的行。如果一個表中的某一行在另一個表中沒有對應的匹配行,那么該行就不會出現在查詢結果中。
  • 行為INNER JOIN 返回的是兩個表中匹配的數據行,若某個表的某行在另一個表中找不到對應的匹配行,那么這一行就不會出現在查詢結果中。
示例:

假設有兩個表:

  • students(學生表)

    idname
    1Alice
    2Bob
    3Charlie
  • courses(課程表)

    student_idcourse
    1Math
    2Science
    4History

查詢:SELECT students.name, courses.course FROM students JOIN courses ON students.id = courses.student_id;

結果

namecourse
AliceMath
BobScience
  • 只有 studentscourses 表中匹配的行會出現在結果中,Charlie 沒有參加任何課程,所以不會出現在結果中。

2. LEFT JOIN(左外連接)

  • 定義LEFT JOIN 返回左表(即 FROM 后指定的第一個表)中的所有行,即使這些行在右表(即 JOIN 后指定的表)中沒有匹配項。如果左表中的某行在右表中找不到對應的匹配行,那么右表中的字段會用 NULL 填充。
  • 行為LEFT JOIN 返回的是左表中的所有數據行,若右表沒有與左表行匹配的數據,則右表的列將會用 NULL 填充。
示例:

使用同樣的表 studentscourses,查詢:SELECT students.name, courses.course FROM students LEFT JOIN courses ON students.id = courses.student_id;

結果

namecourse
AliceMath
BobScience
CharlieNULL
  • 即使 Charlie 沒有參加任何課程,LEFT JOIN 仍然返回了 Charlie 的數據行,并且 courses.course 列顯示為 NULL

總結:

  • JOININNER JOIN:只返回兩個表中匹配的行。如果某行在另一個表中沒有對應的行,則該行不會出現在結果中。
  • LEFT JOIN(左外連接):返回左表(FROM 后的表)中的所有行,即使右表中沒有匹配的行。如果右表沒有匹配項,右表的字段會填充 NULL

用途:

  • INNER JOIN:用于只關心兩個表中匹配的記錄,常見于查詢需要聯動的數據。
  • LEFT JOIN:用于查詢左表中的所有數據,即使右表沒有匹配的記錄。例如,查詢所有學生及其參加的課程,即使有些學生沒有參加任何課程。

mysql中join 我后面不加條件呢?在 MySQL 中,如果在使用 JOIN 時不加連接條件,會發生笛卡爾積(Cartesian Product)。笛卡爾積是指將兩個表的每一行與另一個表的每一行進行配對,導致結果集的行數是兩個表行數的乘積。

7.AVG函數

AVG() 函數是 SQL 中一個聚合函數,用于計算某一列的 平均值。它會計算某列所有非 NULL 值的平均數。

1. AVG() 函數的基本用法

AVG() 函數可以用于數值型數據列(如整數、浮動數等),它返回該列的平均值。

語法:
AVG(column_name)
  • column_name:要計算平均值的列。

2. 搭配 GROUP BY 使用

通常,AVG() 函數會與 GROUP BY 子句一起使用,這樣可以對數據進行分組計算每個組的平均值。GROUP BY 會根據指定的列對數據進行分組,AVG() 會分別計算每個分組的平均值。

示例 1:計算每個部門的平均薪資

假設有一個員工表 employees,包含以下字段:employee_iddepartmentsalary

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

解釋

  • AVG(salary):計算每個部門的平均薪資。
  • GROUP BY department:將數據按部門進行分組,對每個部門計算薪資的平均值。

結果

departmentavg_salary
HR5000
IT6000
Sales4500

這個查詢的結果是每個部門的平均薪資。

示例 2:計算每個學生的平均成績

假設有一個 students 表,記錄學生的成績:

SELECT student_id, AVG(score) AS avg_score
FROM scores
GROUP BY student_id;

解釋

  • AVG(score):計算每個學生的平均成績。
  • GROUP BY student_id:按學生的 ID 對數據進行分組。

結果

student_idavg_score
185.5
278.0

3. 不搭配 GROUP BY 使用

如果不使用 GROUP BYAVG() 會計算整個數據集的平均值,而不是每個分組的平均值。

示例:計算所有員工的平均薪資

如果你不使用 GROUP BY,就會得到整個表的平均值。

SELECT AVG(salary) AS avg_salary
FROM employees;

結果

avg_salary
5500

這個查詢計算的是所有員工的平均薪資,而沒有分組。

4. 處理 NULL

AVG() 會忽略 NULL 值,它只會計算那些非 NULL 的記錄。例如,如果某個員工的薪資為 NULL,則該值不會影響平均薪資的計算。

5. 總結

  • AVG() 函數計算某列的平均值。
  • GROUP BY 通常與 AVG() 配合使用,用于對數據進行分組并計算每個分組的平均值。
  • 如果不使用 GROUP BYAVG() 會計算整個表的平均值。
  • AVG() 會忽略 NULL 值。

AVG() 是常用的聚合函數之一,用于執行匯總統計,特別適用于報告和數據分析任務。

8.

select Product.product_id, product_name
from Product left join Sales on Product.product_id = Sales.product_id
group by product_id
having count(sale_date between '2019-01-01' and '2019-03-31' or null) = count(*);

這里值得注意的是count的條件用法。舉個例子count(age > 20 or null)這個語句,里面or null必須加,否則就等價于count(*)了,要么就是寫作sum(age > 20)也可以。

我猜測是因為age > 20返回的是0或者1,而count對于不管是0還是1,都是會計數一次的,只有Null不會被計數。所以這個age > 20 or null表達的是不大于20就轉換為null,這樣就不會被count計數

作者:喜刷刷
鏈接:https://leetcode.cn/problems/sales-analysis-iii/description/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

9.CONCAT UPPER LOWER SUBSTRING

SELECT user_id, CONCAT(UPPER(SUBSTRING(name, 1, 1)), LOWER(SUBSTRING(name, 2))) AS name
FROM Users
ORDER BY user_id;
SUBSTRING(string, start, length)

string:要從中提取子字符串的原始字符串。
start:子字符串的起始位置(從 1 開始)。
length:要提取的字符數(可選,如果省略,則提取從起始位置到字符串末尾的所有字符)。

10.

select 
(select distinct salary
from Employee
order by salary desc
limit 1 offset 1 ) as SecondHighestSalary ;

雖然這沒有顯式創建臨時表,但在某種意義上,子查詢的結果就充當了臨時表的角色。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900491.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

其他合成方式介紹

在 SurfaceFlinger 的 Layer 處理邏輯中,除了常見的 Client Composition(GPU合成) 和 Device Composition(HWC合成),還存在一些特殊的合成方式,比如 Sideband、Solid Color 和 Display Decorati…

GraphRAG與知識圖譜

一、GraphRAG介紹 1.1 什么是 Graph RAG? Graph RAG(Retrieval-Augmented Generation),是一種基于知識圖譜的檢索增強技術, 通過構建圖模型的知識表達,將實體和關系之間的聯系用圖的形式進行展示&#xff…

一個開源的 VS Code 大模型聊天插件:Light-at

這篇文章是一個開發雜談。對于有經驗的開發者來說,可能這個項目并不算特別復雜或者高技術,只是對我個人來說算一個里程碑,因此寫篇雜談文章記錄一下。也許也能給起步者一些參考。 項目地址:https://github.com/HiMeditator/light-…

SQL121 創建索引

-- 普通索引 CREATE INDEX idx_duration ON examination_info(duration);-- 唯一索引 CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);-- 全文索引 CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);描述 現有一張試卷信息表examination_in…

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

Linux終止進程(kill process)的一些玩法

經常運行一個程序時,表面上已經終止了,實際上還在后臺運行。一來呢,它可能占據端口,導致端口復用的時候報錯。二來呢,它可能占用GPU,讓你顯存直接少一塊。 尤其是在多進程程序,假如運行“python…

《比特城傳奇:公鑰、私鑰與網絡安全的守護之戰》

點擊下面圖片帶您領略全新的嵌入式學習路線 🔥爆款熱榜 88萬閱讀 1.6萬收藏 第一章:雙鑰之謎 比特城的清晨總是籠罩著一層薄霧,仿佛這座城市本身就是由無數個0和1編織而成的幻境。在這里,信息如同空氣般無處不在,但…

BGP路由協議之屬性1

公認屬性是所有 BGP 路由器都必須能夠識別的屬性 公認必遵 (Well-known Mandatory) : 必須包括在每個 Update 消息里公認任意 (Well-known Discretionary) : 可能包括在某些 Update 消息里。 可選屬性不需要都被 BGP 路由器所識別 可選過渡(OptionalTransitive) : BGP 設備不…

Pr視頻剪輯 Premiere Pro 2024 for Mac

Pr視頻剪輯 Premiere Pro 2024 for Mac 文章目錄 Pr視頻剪輯 Premiere Pro 2024 for Mac一、介紹二、效果三、下載 一、介紹 Premiere Pro 2024 for Mac是一款專業的視頻編輯軟件,廣泛應用于電影、電視、廣告等領域。它為Mac用戶提供了強大的剪輯、調色、音頻處理等…

oracle 包的管理

在PL/SQL程序開發中,為了方便實現模塊化程序的管理,可以將PL/SQL元素(如存儲過程、函數、變量、常量、自定義數據類型、游標等)根據模塊的程序結構組織在一起,存放在一個包中,稱為一個完整的單元&#xff0…

LINUX 5 cat du head tail wc 計算機拓撲結構 計算機網絡 服務器 計算機硬件

計算機網絡 計算機拓撲結構 計算機按性能指標分:巨型機、大型機、小型機、微型機。大型機、小型機安全穩定,小型機用于郵件服務器 Unix系統。按用途分:專用機、通用機 計算機網絡:局域網‘、廣域網 通信協議’ 計算機終端、客戶端…

從零開始的圖論講解(1)——圖的概念,圖的存儲,圖的遍歷與圖的拓撲排序

目錄 前言 圖的概念 1. 頂點和邊 2. 圖的分類 3. 圖的基本性質 圖的存儲 鄰接矩陣存圖 鄰接表存圖 圖的基本遍歷 拓撲排序 拓撲排序是如何寫的呢? 1. 統計每個節點的入度 2. 構建鄰接表 3. 將所有入度為 0 的節點加入隊列 4. 不斷彈出隊頭節點,更新其…

強化學習Q-Learning:DQN

強化學習Q-Learning/DQN 本文是一篇學習筆記,主要參考李宏毅老師的強化學習課程。 目前主流的強化學習方法大致可以分為 policy-based 和 value-based 兩大類。之前我們介紹的 policy gradient 策略梯度,就是 policy-based 的方法。本文要介紹的 Q-learn…

W公司云安全解決方案

1 安全理念DevOpvSec 統一安全運營 2 安全責任分層模型 3 云安全產品線 4 云安全解決方案/部署架構 5 安全能力 6 信創云平臺適配 7 統一化安全運營 利用云安全平臺實現統一的安全運維 8 安全資源池的統一納管 9 案例分享:私有云 10 云安全解決方案的衍生特點 11 …

python中的in關鍵字查找的時間復雜度

列表(List) 對于列表來說, in 運算符的復雜度是 O(n),其中n是列表的長度。這意味著如果列表中有n個元素,那么執行 in 運算符需要遍歷整個列表來查找目標元素。 以下是一個示例,演示了在列表中使用 in 運算…

MySQL基礎 [一] - Ubuntu版本安裝

目錄 預安裝 先查看自己操作系統的版本 添加MySQL APT下載源 下載 安裝 正式安裝 查看MySQL狀態 打開MySQL 預安裝 先查看自己操作系統的版本 lsb_release -a 添加MySQL APT下載源 下載 下載發布包 下載地址 : https://dev.mysql.com/downloads/repo/apt/ 這里下…

Springboot整合Mybatis+Maven+Thymeleaf學生成績管理系統

前言 該系統為學生成績管理系統,可以當作學習參考,也可以成為Spirng Boot初學者的學習代碼! 系統描述 學生成績管理系統提供了三種角色:學生,老師,網站管理員。主要實現的功能如下: 登錄 &a…

操作系統之文件系統

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,…

AG32:MCU和CPLD如何交互?

本文檔介紹了AG32開發中,MCU與CPLD交互的具體方式以及例子。如需了解AG32更多資料可發郵件:salesagm-micro.com 一、MCU和CPLD直接交互 cpld工程創建及編譯的操作流程,參考文檔《AG32下fpga和cpld的使用入門》 在工程中,用戶邏輯…

機器人軌跡跟蹤控制——CLF-CBF-QP

本次使用MATLAB復現CLF-CBF-QP算法,以實現機器人軌跡跟蹤同時保證安全性能 模型 使用自行車模型來進行模擬機器人的移動動態,具體的模型推導參考車輛運動學模型-自行車模型 采用偏差變量 p ~ = p ? p r e f u ~ = u ? u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …