分組查詢 group by
group by 屬性名 [having 條件表達式][ with rollup]
“屬性名 ”指按照該字段值進行分組;“having 條件表達式 ”用來限制分組后的顯示,滿足條件的結果將被顯示;with rollup 將會在所有記錄的最后加上一條記錄,該記錄是上面所有記錄的總和。
1)單獨使用
group by 單獨使用,查詢結果只顯示一個分組的一條記錄。
實例:
select * from employee group by sex;
將只顯示男女兩條記錄。
2)與group_concat()函數一起使用
每個分組中指定字段值都顯示出來
實例:
select sex,group_concat(name) from employee group by sex;
顯示結果中“女”會顯示所有sex為“女”的名字name
sex | group_concat(name)
女 | 小紅,小蘭
男 | 張三,王五,王六
3)與集合函數一起使用
實例:
select sex,count(sex) from employee group by sex;
結果:
sex | count(num)
女 | 1
男 | 3
count()為計算個數的方法。
4)與having一起使用
“having條件表達式”,可以限制輸出結果。只有滿足條件表達式的結果才顯示。
實例:
select sex,count(sex) from employee group by sex having count(sex) >= 3;
結果:
sex | count(sex)
男 | 3
“having條件表達式”作用于分組后的記錄。
5)按多字段進行分組
select * from employee group by d_id,sex;
查詢結果先按d_id分組,再按sex進行分組
6) 與with rollup一起使用
使用with rollup將會在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和
實例:
select sex,count(sex) from employee group by sex with rollup;
結果:
sex | count(sex)
女 | 1
男 | 5
null | 6
如果是字符串的話,比如姓名就會生成“張三,李四,王五”這種類型的結果,即name總和。