SQL數(shù)據(jù)排序與分組
一、為什么要對數(shù)據(jù)進(jìn)行分組
數(shù)據(jù)分組:是按照邏輯次序把具有重復(fù)值的字段進(jìn)行合并。
二、GROUP BY子句
語法:
SELECT column1,column2 FROM table1,table2 WHERE conditions GROUP BY column1,column2 ORDER BY column1,column2; |
1、分組函數(shù)
典型的分組函數(shù)—也就是用于GROUP BY子句對數(shù)據(jù)進(jìn)行劃分的函數(shù)—包括AVG、MAX、MIN、SUM、COUNT。
2、對選中的數(shù)據(jù)進(jìn)行分組
數(shù)據(jù)分組是個(gè)簡單的過程。被選中的字段(查詢中SELECT之后的字段列表)才能在GROUP BY子句里引用;如果字段在SELECT語句里找不到,就不能用于GROUP BY子句。
注:在對數(shù)據(jù)進(jìn)行分組時(shí),分組字段的次序不一定要與SELECT子句里字段次序相同。
3、創(chuàng)建分組和使用匯總函數(shù)
SELECT語句在使用GROUP BY子句時(shí)必須滿足一定條件。特別是被選中的字段必須出現(xiàn)在GROUP BY子句里,除了匯總函數(shù)。
注:具體數(shù)值在排序時(shí)位于NULL值之前,字符型在排序時(shí)位于NULL值之后。
4、以整數(shù)代表字段名稱
像ORDER BY子句一樣,GROUP BY子句里也可以用整數(shù)代表字段名稱。
三、GROUP BY和ORDER BY
ORDER BY子句專門用于對查詢得到的數(shù)據(jù)進(jìn)行排序,GROUP BY子句也把查詢得到的數(shù)據(jù)排序?yàn)檫m當(dāng)分組的數(shù)據(jù),因此,GROUP BY子句也可以像ORDER BY子句那樣用于數(shù)據(jù)排序。
使用GROUP BY子句實(shí)現(xiàn)排序操作的區(qū)別與缺點(diǎn):
1、所有被選中的、非匯總函數(shù)的字段必須列在GROUP BY子句里;
2、除非需要使用匯總函數(shù),否則使用GROUP BY子句進(jìn)行排序通常是沒有必要的。
四、CUBE和ROLLUP語句
ROLLUP語法:
GROUP BY ROLLUP(ordered column list of grouping sets)
MySQL ROLLUP語法:
GROUP BY order column list of grouping sets WITH ROLLUP
ROLLUP語句的工作方式:
1、在完成了基本的分組數(shù)據(jù)匯總以后,
2、按照從右向左的順序,每次去掉字段列表中的最后一個(gè)字段,再對剩余的字段進(jìn)行分組統(tǒng)計(jì),并將獲得的小計(jì)結(jié)果插入返回表中,被去掉的字段位置使用NULL填充。
3、最后,再對全表進(jìn)行一次統(tǒng)計(jì),所有的字段位置均使用NULL填充。
CUBE語法:
GROUP BY CUBE(column list of grouping sets)
CUBE語句的工作方式:
1、它對分組列表中的所有字段進(jìn)行排列組合,并根據(jù)每一種組合結(jié)果,分別進(jìn)行統(tǒng)計(jì)匯總。 2、最后,CUBE語句也會對全表進(jìn)行統(tǒng)計(jì)。
五、HAVING子句
HAVING子句必須跟在GROUP BY子句之后,在ORDER BY子句之前。
語法: SELECT column1,column2 FROM table1,table2 WHERE contidions GROUP BY column1,column2 HAVING conditions ORDER BY column1,column2; |
posted on 2014-06-03 09:56 順其自然EVO 閱讀(221) 評論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫