mysql使用group by分組數據使用總結

mysql使用group by子句總結


分組數據的作用: 分組數據可以便於我們彙總表內容的子集,當我們使用group by分組數據的時候,會將表數據按照給出的列排序分組,分成多個邏輯組,我們可以對每個邏輯組使用聚集運算.


我們創建一個表test_one,來展示使用group by分組數據,group by子句告訴mysql按照哪些列來排序分組。

表test_one:

mysql> select * from test_one;
+----+-----+-----------+
| id | uid | shop_name |
+----+-----+-----------+
|  1 |   1 | 牙刷      |
|  2 |   1 | 牙膏      |
|  3 |   1 | 牙刷      |
|  4 |   2 | 筆        |
|  5 |   2 | 鋼筆      |
|  6 |   2 | 牙刷      |
|  7 |   2 | 牙刷      |

+----+-----+-----------+

表簡介:該表是用戶買了什麼東西的表,uid表示用戶的id,shop_name表示用戶買了什麼東西.


1.使用單列排序分組數據.

我們可以使用單列來分組數據,將相同的值分到一個邏輯分組中,然後可以彙總每個分組的數據. 

場景:根據test_one表,我們獲取每個用戶購物多少次.

sql語句: select uid , count(*) from test_one group by uid; 

該sql使用uid列排序分組數據,我們使用count(*)聚集函數,彙總每個分組有多少行,獲取每個用戶購物多少次。

結果:

mysql> select uid ,count(*) from test_one group by uid;
+-----+----------+
| uid | count(*) |
+-----+----------+
|   1 |        3 |
|   2 |        4 |
+-----+----------+


2.使用多列排序分組數據.

group by子句可以使用多列來分組,使用多列分組的執行流程是:先按照第一列進行分組,分成多個邏輯分組,然後我們按照第二列進行的分組,第二列的分組是在第一列分組的基礎上進行的,也就是說在第一列分組的基礎上,將每個分組的數據按照第二列來進行分組,最後彙總數據的時候是在最後一個規定的分組上進行的。

場景:我們想獲取用戶購買每種商品購買了多少次.

sql語句:select uid ,shop_name,count(*) from test_one group by uid,shop_name;

該sql語句,先使用uid列進行分組,分組後的結果是用戶購買了哪些商品,然後我們根據shop_name 進行分組,在按照uid分組的基礎上,我們可以將用戶購買的相同的商品分組,彙總數據是在最後一個規定的分組上.

結果:

mysql> select uid ,shop_name,count(*) from test_one group by uid,shop_name;
+-----+-----------+----------+
| uid | shop_name | count(*) |
+-----+-----------+----------+
|   1 | 牙刷      |        2 |
|   1 | 牙膏      |        1 |
|   2 | 牙刷      |        2 |
|   2 | 筆        |        1 |
|   2 | 鋼筆      |        1 |
+-----+-----------+----------+

我們可以獲取用戶的購買某種商品多少次。


總結:group by子句列出的列必須是檢索列。


如果有錯誤請大家指出,謝謝!



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