sql 分組查詢


1、分組查詢語句 GroupBy+Group_concat

group by 是分組,是分組,是分組,重要的事情說三遍!分組並不是去重,而是分組。

將查詢結果按一個或多個進行分組,字段值相同的為一組。

比如:

公司一個部門的為一組,學校班級為一組或者一個年級為一組;

以公司的部門為例:

 

1 select deparmant, GROUP_CONCAT(`name`) from employee GROUP BY deparmant

這條sql語句的意思是,從employee表中以deparmant為組,查出來一列是deparmant部門、一列是GROUP_CONCAT(`name`)聚合的姓名的數據;

2、分組注意事項

分組注意事項: 在分組時,select后面跟的的字段一般都會出現在 group by 后;

例如:以性別分組寫一個sql

1 SELECT gender,GROUP_CONCAT(`name`) from employee GROUP BY gender

這條sql語句的意思是,從employee表中以gender 性別為組,查出來一列是gender性別、一列是GROUP_CONCAT(`name`)聚合的姓名的數據;

3、可以加入函數寫sql

 

1 select deparmant, GROUP_CONCAT(salary), SUM(salary),AVG(salary) 平均工資,MAX(salary) 最高工資 from employee GROUP BY deparmant;

-- 根據department 分組,計算各部門下工資總數,平均工資,最高工資![1532919789347]

再舉個例子:

-- 查詢每個部門的部門名稱以及每個部門工資大於1500的人數

1 SELECT deparmant,GROUP_CONCAT(salary), COUNT(*) from employee WHERE salary > 1500 GROUP BY deparmant

4、SQL分組GroupBy+Having

group by + having 用來分組查詢后指定一些條件來輸出查詢結果

having 和 where 一樣,但 having 只能用於 group by

1 -- 查詢工資總和大於 9000的部門名稱
2 SELECT deparmant, GROUP_CONCAT(salary), SUM(salary) FROM employee 
3 GROUP BY deparmant 
4 HAVING SUM(salary) > 9000;

having 和 where 的區別:

  • having 是在分組后對數據進行過濾,where 是在分組前對數據進行過濾
  • having后面可以使用分組函數(統計函數),where后面不可以使用分組函數
  • where 是對分組前記錄的條件,如果某行記錄沒有滿足where字句的條件,那么這行記錄不會參加分組;而having是對分組后數據的約束

5、sql語句書寫順序

 


免責聲明!

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



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