mysql_分組group by和分組后的過濾having


可以按照任意字段分組,但是分組完畢后,比如group by post,只能查看post字段,如果想查看組內信息,需要借助於聚合函數。

聚合函數:
  max 最大值
  min 最小值
  avg 平均值
  sum 求和
  count 總數
# 查詢每個post字段下id的記錄個數。
select post,count(id) as emp_count from employee group by post;

# 查詢每個post字段下的salary字段數據的平均值。
select post,avg(salary) as emp_count from employee group by post;

 

 強調:

如果我們用unique的字段作為分組的依據,則每一條記錄自成一組,這種分組沒有意義
多條記錄之間的某個字段值相同,該字段通常用來作為分組的依據

如果沒有group by,則整個表為一組,同意可以使用聚合函數。

# 查詢整個表中最高的salary的值。
select max(salary) as emp_count from employee;

 

 group_concat函數:

# 查詢並列出每種post字段下面的name字段。
select post,group_concat(name) as emp_count from employee group by post;

 

having(過濾) 

#!!!執行優先級從高到低:where > group by > having 
#1. Where 發生在分組group by之前,因而Where中可以有任意字段,但是絕對不能使用聚合函數。

#2. Having發生在分組group by之后,因而Having中可以使用分組的字段,無法直接取到其他字段,可以使用聚合函數
# 查詢以post字段分組后每個post字段下數量大於2的記錄。
select post,group_concat(name),count(id) from employee group by post having count(id) > 2;

# 查詢以post字段分組后,每個post字段下salary字段數據平均值大於10000的記錄。
select post,avg(salary) from employee group by post having avg(salary) > 10000;

 


免責聲明!

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



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