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子句列出的列必须是检索列。
如果有错误请大家指出,谢谢!