超级简单理解group by

公司的实习生小伙子不理解group by,我就发表一下自己的拙见,顺便当作笔记,日后常加翻阅。

记住下面三句话即可!
1、分组的作用就是为了做聚合,不聚合的分组有什么意义呢!
2、分组的select中“如果存在”字段,那么select中的字段必须和分组条件中的字段“完全一致”,否则查询出来的结果没有意义!
3、分组的聚合函数的参数可以是任何内容,不一定必须是分组条件中的字段!

-- 例子
mysql> select * from tb_user;
+----+------+--------+--------+
| id | name | gender | status |
+----+------+--------+--------+
|  1 | 张三 ||      1 |
|  2 | 李四 ||      1 |
|  3 | 王五 ||      0 |
|  4 | 赵六 ||      1 |
|  5 | 田七 ||      0 |
+----+------+--------+--------+

-- 查询结果没有意义
mysql> select * from tb_user group by gender;
+----+------+--------+--------+
| id | name | gender | status |
+----+------+--------+--------+
|  2 | 李四 ||      1 |
|  1 | 张三 ||      1 |
+----+------+--------+--------+

-- 这么写是有一点意义的。就是可以看出gender字段的取值有几种,意义不大。
mysql> select gender from tb_user group by gender;
+--------+
| gender |
+--------+
||
||
+--------+

-- 查询结果没有意义
mysql> select gender,status from tb_user group by gender,status;
+--------+--------+
| gender | status |
+--------+--------+
||      1 |
||      0 |
||      1 |
+--------+--------+

-- 分组和聚合函数配合才有意义,下面是典型的分组查询
mysql> select gender,count(1) from tb_user group by gender;
+--------+----------+
| gender | count(1) |
+--------+----------+
||        2 |
||        3 |
+--------+----------+

-- select中没有group by后面的字段,查询结果无意义
mysql> select `name` from tb_user group by gender;
+------+
| name |
+------+
| 李四 |
| 张三 |
+------+

-- 这尼玛还是没有意义
mysql> select `name`,gender from tb_user group by gender;
+------+--------+
| name | gender |
+------+--------+
| 李四 ||
| 张三 ||
+------+--------+

-- select后面如果有字段,就必须和group by后面的字段完全一致。下面不一致,查询结果没有意义。
-- 下面的count()函数的参数不用非得写为gender,因为count()计算的是每组的所有记录。
-- group by是将一个表拆分成多个表,聚合函数是将多条记录合并成一条结果集。因此分组之后count(),就计算出了每组一共多少条记录。
mysql> select `name`,gender,count(1) from tb_user group by gender;
+------+--------+----------+
| name | gender | count(1) |
+------+--------+----------+
| 李四 ||        2 |
| 张三 ||        3 |
+------+--------+----------+

-- 下面是一个典型的分组语句。
-- select后面“如果有”字段,那么必须和group by的字段“完全一致”。
-- 分组的聚合函数中可以写任何内容,就当作一张完整的小表来进行聚合即可。
-- 见下图。
mysql> select gender,count(1) from tb_user group by gender;
+--------+----------+
| gender | count(1) |
+--------+----------+
||        2 |
||        3 |
+--------+----------+

  • 一张图理解group by
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值