MySQL如何使用分組group by


背景:一些場景下是需要用到分組數據的,比如剛工作那會兒,有一次的需求是統計某個網點的各個職員關於一項任務的推廣情況。又比如我要統計每個部門的人數有多少。這些都需要用到分組數據,分組數據就要使用group by

         那group  by 用法簡單來說可以分為兩種,一種是直接分組不添加限制條件,第二種就是加上限制條件

測試數據如下:官方給的一份測試數據

查詢每個部門的人數

--統計人數要用count()函數 ,查詢每個部門的人數就要以部門作為分組對象,將部門編號放在group by后面
select count(*) from dept_emp group by dept_no;

如果我要查詢部門人數大於3萬的各部門的人數。這時對部門增加了限制,就要用到限制條件,此時要用having 而不是where。也就是說與group by搭配使用的時having不是group by

-- 增加限制條件時,having要放在分組后面,部門人數大於3萬的表達式為count(dept_no)>30000
select count(*) from dept_emp group by dept_no having count(dept_no)>30000;

使用order by分組時需要注意以下幾點:

  • GROUP BY 子句可以包含任意數目的列。這使得能對分組進行嵌套,為數據分組提供更細致的控制。
  •  如果在 GROUP BY 子句中嵌套了分組,數據將在最后規定的分組上進行匯總。換句話說,在建立分組時,指定的所有列都一起計算(所以不能從個別的列取回數據)。
  • GROUP BY 子句中列出的每個列都必須是檢索列或有效的表達式(但不能是聚集函數)。如果在 SELECT 中使用表達式,則必須在GROUP BY 子句中指定相同的表達式。不能使用別名。
  • 除聚集計算語句外, SELECT 語句中的每個列都必須在 GROUP BY 子句中給出。
  • 如果分組列中具有 NULL 值,則 NULL 將作為一個分組返回。如果列中有多行 NULL 值,它們將分為一組。
  •  GROUP BY 子句必須出現在 WHERE 子句之后, ORDER BY 子句之前。

 

與group by配合的關鍵字還有一個 with rollup ,意思是匯總,將所有分組的數據匯總在一起

比如:和第一個例子比較,發現多了第十行,第十行就是匯總的數據

select dept_no,count(*) from dept_emp group by dept_no with rollup   ;

如果分組和排序一起用的時候怎么用呢,比如在第二例子上進行修改。如果我要查詢部門人數大於3萬的各部門的人數,結果降序排列。

select dept_no, count(*) from dept_emp group by dept_no having count(dept_no)>30000 order by count(dept_no) desc ;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM