可以按照任意字段分組,但是分組完畢后,比如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;