multiple - sql group by where順序




在多列上使用分組 (2)

我明白GROUP BY x

GROUP BY x, y如何工作的,這是什麼意思?


GROUP BY子句與聚合函數結合使用,可將結果集按一個或多個列分組。 例如:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

記住這個命令:

1)SELECT(用於從數據庫中選擇數據)

2)FROM(子句用於列出表)

3)WHERE(子句用於過濾記錄)

4)GROUP BY(子句可以在SELECT語句中用於跨多個記錄收集數據,並將結果按一個或多個列分組)

5)HAVING(子句與GROUP BY子句結合使用,將返回行的組限制為只有條件為TRUE的行)

6)ORDER BY(關鍵字用於排序結果集)

如果您使用聚合函數,則可以使用所有這些函數,並且這是它們必須設置的順序,否則可能會出錯。

聚合函數是:

MIN返回給定列中的最小值

SUM返回給定列中數值的總和

AVG返回給定列的平均值

COUNT返回給定列中值的總數

COUNT(*)返回表中的行數


Group By X表示 Group By X 所有具有相同值的人放在一個組中

Group By X, Y表示將X和Y中所有具有相同值的那些組合在一個組中

為了舉例說明一下,假設我們有如下表格來處理誰在大學學習什麼科目:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

當您僅在主題欄中使用group by 說:

select Subject, Count(*)
from Subject_Selection
group by Subject

你會得到像這樣的東西:

Subject    Count
------------------------------
ITB001     5
MKB114     2

...因為ITB001有5個條目,MKB114有2個條目

如果我們要分兩列:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

我們會得到這個:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

這是因為,當我們按兩列進行分組時,它們是“將它們分組,以便所有具有相同主題和學期的人都在同一組中,然後計算所有聚合函數 (計數,總和,平均值等)。 ) 為每個這些組“ 。 在這個例子中,通過這樣一個事實可以證明這一點,當我們計算它們時,在第一學期有個人在做ITB001,在第二學期有兩個人在做ITB001。兩個做MKB114的人都在第一學期,所以沒有排第2學期(沒有數據適合組“MKB114,第2學期”)

希望這是有道理的。







group-by