qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          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語句在SQL Server和Oracle中都可以使用,MySQL尚不支持該語句。
            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ù)庫

          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿拉善右旗| 夏津县| 滨州市| 汾西县| 藁城市| 武定县| 平遥县| 萍乡市| 靖远县| 三门峡市| 三明市| 汝南县| 弥勒县| 渭南市| 靖远县| 古浪县| 清新县| 团风县| 上杭县| 慈溪市| 焉耆| 新乐市| 荃湾区| 洛隆县| 揭东县| 灵丘县| 邻水| 休宁县| 璧山县| 巴林右旗| 舞阳县| 阿拉善盟| 日喀则市| 苏尼特左旗| 元阳县| 金秀| 汝南县| 南溪县| 陇川县| 东乡族自治县| 霍山县|