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子句列出的列必須是檢索列。
如果有錯誤請大家指出,謝謝!