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語句書寫順序