分組數(shù)據(jù)
使用分組可將數(shù)據(jù)分為多個(gè)邏輯組,對(duì)每個(gè)組進(jìn)行聚集計(jì)算坡锡。
創(chuàng)建分組
- 分組使用SELECT 語(yǔ)句的GROUP BY 子句建立
SELECT column_name,COUNT(*) AS column_num
FROM table_name
GROUP BY column_name;
- GROUP BY 子句可包含任意數(shù)目的列,因而可對(duì)分組進(jìn)行嵌套,更細(xì)致地進(jìn)行數(shù)據(jù)分組
- 若果在GROUP BY 子句中嵌套了分組祠乃,數(shù)據(jù)將在最后指定的分組上進(jìn)行匯總
- GROUP BY 子句中列出的每一列都必須是檢索列或有效的表達(dá)式(但不能是聚集函數(shù))横朋。如果在SELECT 中使用表達(dá)式仑乌,則必須在GROUP BY 子句中指定相同的表達(dá)式,不能使用別名琴锭。
- 大多數(shù)SQL實(shí)現(xiàn)不允許GROUP BY 列帶有長(zhǎng)度可變的數(shù)據(jù)類型(如文本或備注型字段)
- 出聚集計(jì)算語(yǔ)句外晰甚,SELECT 語(yǔ)句中的每一列都必須在GROUP BY 子句中給出
- 如果分組列中包含NULL 值的行,則NULL將作為一個(gè)分組返回决帖,如果列中有多行NULL 值厕九,它們將分為一組
過(guò)濾分組
SELECT column_name,COUNT(*) AS column_num
FROM table_name
WHERE column_name = 'str'
GROUP BY column_name
HAVING COUNT(*) >= 2;
- WHERE 過(guò)濾行;HAVING 過(guò)濾分組
- WHERE 在數(shù)據(jù)分組前進(jìn)行過(guò)濾地回;HAVING 在數(shù)據(jù)分組后進(jìn)行過(guò)濾
- 在SELECT指定的字段要么就要包含在GROUP BY語(yǔ)句的后面作為分組的依據(jù)扁远;要么就要被包含在聚合函數(shù)中。
分組和排序
ORDER BY | GROUP BY |
---|---|
對(duì)產(chǎn)生的輸出排序 | 對(duì)行分組刻像,但輸出可能不是分組的排序 |
任意列都可以使用(甚至非選擇的列也可以使用 | 只可能使用選擇列或表達(dá)式列畅买,而且必須使用每個(gè)選擇列表達(dá)式 |
不一定需要 | 如果與聚集函數(shù)一起使用列(或表達(dá)式)則必須使用 |
- 不要依賴GROUP BY 排序數(shù)據(jù)