SQL數據排序與分組

一、爲什麼要對數據進行分組

    數據分組:是按照邏輯次序把具有重複值的字段進行合併。

二、GROUP BY子句

    語法:
    SELECT column1,column2
    FROM table1,table2
    WHERE conditions
    GROUP BY column1,column2
    ORDER BY column1,column2;

    1、分組函數
        典型的分組函數—也就是用於GROUP BY子句對數據進行劃分的函數—包括AVG、MAX、MIN、SUM、COUNT。

    2、對選中的數據進行分組
        數據分組是個簡單的過程。被選中的字段(查詢中SELECT之後的字段列表)才能在GROUP BY子句裏引用;如果字段在SELECT語句裏找不到,就不能用於GROUP BY子句。
        注:在對數據進行分組時,分組字段的次序不一定要與SELECT子句裏字段次序相同。

    3、創建分組和使用匯總函數
        SELECT語句在使用GROUP BY子句時必須滿足一定條件。特別是被選中的字段必須出現在GROUP BY子句裏,除了彙總函數。
       注:具體數值在排序時位於NULL值之前,字符型在排序時位於NULL值之後。

    4、以整數代表字段名稱
        像ORDER BY子句一樣,GROUP BY子句裏也可以用整數代表字段名稱。

三、GROUP BY和ORDER BY

    ORDER BY子句專門用於對查詢得到的數據進行排序,GROUP BY子句也把查詢得到的數據排序爲適當分組的數據,因此,GROUP BY子句也可以像ORDER BY子句那樣用於數據排序。

    使用GROUP BY子句實現排序操作的區別與缺點:
    1、所有被選中的、非彙總函數的字段必須列在GROUP BY子句裏;
    2、除非需要使用匯總函數,否則使用GROUP BY子句進行排序通常是沒有必要的。

四、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、在完成了基本的分組數據彙總以後,
    2、按照從右向左的順序,每次去掉字段列表中的最後一個字段,再對剩餘的字段進行分組統計,並將獲得的小計結果插入返回表中,被去掉的字段位置使用NULL填充。
    3、最後,再對全表進行一次統計,所有的字段位置均使用NULL填充。

    CUBE語法:
    GROUP BY CUBE(column list of grouping sets)

    CUBE語句在SQL Server和Oracle中都可以使用,MySQL尚不支持該語句。

    CUBE語句的工作方式:
    1、它對分組列表中的所有字段進行排列組合,並根據每一種組合結果,分別進行統計彙總。    2、最後,CUBE語句也會對全表進行統計。

五、HAVING子句

    HAVING子句必須跟在GROUP BY子句之後,在ORDER BY子句之前。

    語法:
    SELECT column1,column2
    FROM table1,table2
    WHERE contidions
    GROUP BY column1,column2
    HAVING conditions
    ORDER BY column1,column2;       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章