標籤:字串類型 指定 bsp 使用字串 執行 group by 欄位 部門 style
彙總函式
彙總: 將分散的聚集到一起.
彙總函式: 對列進行操作,返回的結果是一個單一的值,除了 COUNT 以外,都會忽略空值
COUNT:統計指定列不為NULL的記錄行數;
SUM:計算指定列的數值和,如果指定列類型不是數實值型別,那麼計算結果為0;
MAX:計算指定列的最大值,如果指定列是字串類型,那麼使用字串排序運算;
MIN:計算指定列的最小值,如果指定列是字串類型,那麼使用字串排序運算;
AVG:計算指定列的平均值,如果指定列類型不是數實值型別,那麼計算結果為0;
select 彙總函式 from 表名;
例如:
select avg(age),min(age),max(age),sum(age),count(age)from person #統計人員的平均年齡,最小年齡,最大年齡,總年齡,不為空白的行數
分組
分組的含義: 將一些具有相同特徵的資料 進行歸類.比如:性別,部門,崗位等等
怎麼區分什麼時候需要分組呢?
特徵: 遇到 "每" 字,一般需要進行分組操作.
例如: 1. 公司每個部門有多少人.
2. 公司中有 多少男員工 和 多少女員工.
#分組查詢格式:select 被分組的欄位 from 表名 group by 分組欄位 [having 條件欄位]ps: 分組查詢可以與 彙總函式 組合使用.#查詢班級的平均年齡select avg(age),name from tb GROUP BY class;#查詢每個部門的平均薪資 並且看看這個部門的員工都有誰?select avg(salary),dept,GROUP_CONCAT(name) from tb1 GROUP BY dept;#GROUP_CONCAT(expr):按照分組,將expr字串按逗號分隔,組合起來#查詢平均薪資大於10000的部門, 並且看看這個部門的員工都有誰? select avg(salary),dept,GROUP_CONCAT(name) from person GROUP BY dept; having avg(salary)>10000; #這裡的having後面跟條件與where相似,但也有不同
where 與 having區別:
#執行優先順序從高到低:where > group by > having
#1. Where 發生在分組group by之前,因而Where中可以有任意欄位,但是絕對不能使用彙總函式。
#2. Having發生在分組group by之後,因而Having中可以使用分組的欄位,無法直接取到其他欄位,可以使用彙總函式
分頁查詢
關鍵字 limit
limit (起始條數),(查詢多少條數),如果limit後只有一個數字,則代表 0,(查詢多少條數)
#查詢前5條資料select * from person limit 3; #查詢第3條到第3條資料select * from person limit 3,6;
SQL 陳述式關鍵字的執行順序
1、查詢中常用到的關鍵詞有:
SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY
其中,SELECT與FROM是必需的,其他關鍵詞則是可選的。
標準的 SQL 的解析順序為: FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
(1).FROM 欄位語句, 組裝來自不同資料來源的資料
(2).WHERE 表名, 基於指定的條件對記錄進行篩選
(3).GROUP BY 分組欄位列表, 將資料劃分為多個分組
(4).使用彙總函式進行計算
(5).使用 HAVING 子句篩選分組
(6).計算所有的運算式
(7).使用 ORDER BY 對結果集進行排序 ASC(升序,預設)、DESC(降序)
例如:
在學產生績表中,把班級為1班的學產生績按照學生姓名分組,並且篩選分組結果,匯總計算各個學生的總成績,選出總成績大於600分的學生列表,並按照總分從高到低排列。
Python代碼
select sum(score)as s,name from tb1
where class_id=1 group by namehaving s>600
order by 2 asc
在上面的樣本中SQL語句的執行順序如下:
①首先執行FROM子句,從tb1表檢索記錄;
②執行WHERE子句,篩選出tb1表中class_id=1的所有記錄;
③執行GROUP BY子句,把tb1表按name列進行分組;
④計算SUM()聚集合函式,求出每個name的score之和;
⑤執行HAVING子句,篩選出sum(score)大於600的分組;
⑥提取name,sum(score)兩個欄位,產生新的結果集;
⑦執行ORDER BY子句,把⑥的結果集按sum(score)欄位升序排列。
MYSQL單表查詢