mysql中group by的用法是配合聚合函數,利用分組資訊進行統計,語句如「select name,sum(id) from test group by name,number」。
推薦:《mysql影片教學》
先來看下mysql中group by用法是什麼,表名為test:
執行如下SQL語句:
SELECT name FROM test GROUP BY name
你應該很容易知道執行的結果,沒錯,就是下mysql中group by用法是什麼:
可是為了能夠更好的理解「group by」多個列「和」聚合函數「的應用,我建議在思考的過程中,由mysql中group by用法是什麼到mysql中group by用法是什麼的過程中,增加一個虛構的中間表:虛擬表3。下面說說如何來思考上面SQL語句執行情況:
1.FROM test:該句執行後,應該結果和mysql中group by用法是什麼一樣,就是原來的表。
2.FROM test Group BY name:該句執行後,我們想像生成了虛擬表3,如下所圖所示,生成過程是這樣的:group by name,那麼找name那一列,具有相同name值的行,合併成一行,如對於name值為aa的,那麼與兩行合併成1行,所有的id值和number值都寫到一個單元格裡面,如下圖所示
# 3.接下來就要針對虛擬表3執行Select語句了:
(1)如果執行select *的話,那麼回傳的結果應該是虛擬表3,可是id和number中有的儲存格裡面的內容是多個值的,那麼id跟number會傳回各自儲存格中的排序第一個值。id列會回傳1,3,5
(2)我們再看name列,每個單元格只有一個數據,所以我們select name的話,就沒有問題了。為什麼name列每個單元格只有一個值呢,因為我們就是用name列來group by的。
(3)那麼對於id和number裡面的單元格有多個資料的情況怎麼辦呢?答案就是用聚合函數,聚合函數就用來輸入多個數據,輸出一個數據的。如count(id),sum(number),而每個聚合函數的輸入就是每一個多數據的單元格。
(4)例如我們執行select name,sum(number) from test group by name,那麼sum就對虛擬表3的number列的每個單元格進行sum操作,例如對name為aa的那一行的number列執行sum操作,即2 3,回傳5,最後執行結果如下:
5)group by 多個欄位該怎麼理解呢:如group by name,number,我們可以把name和number 看成一個整體字段,以他們整體來進行分組,如下圖所示:
6)接下來就可以配合select和聚合函數進行操作了。如執行select name,sum(id) from test group by name,number,結果如下圖:
以上是mysql中group by用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!