mysql中group by与having合用注意事项分享

时间:2024-01-15 02:24:55 

group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下:

mysql表结构


mysql> desc t;
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | YES | | 0 | |
| name | varchar(100) | YES | | NULL | |
| aa | varchar(45) | YES | | NULL | |
+——-+————–+——+—–+———+——-+
3 rows in set (0.01 sec)

插入数据


mysql> select * from t;
+——+——+——-+
| id | name | aa |
+——+——+——-+
| 1 | aaaa | bbbb |
| 1 | 1111 | 2222 |
| 1 | 2222 | 33333 |
| 1 | 2222 | 44444 |
| 2 | 2222 | 44444 |
| 2 | 2222 | 1111 |
| 3 | 2222 | 1111 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 3 | 2222 | aaaa |
+——+——+——-+
11 rows in set (0.00 sec)

group by 查询语句


mysql> select id,count(1) ,aa from t group by id;
+——+———-+——-+
| id | count(1) | aa |
+——+———-+——-+
| 1 | 7 | bbbb |
| 2 | 2 | 44444 |
| 3 | 2 | 1111 |
+——+———-+——-+
3 rows in set (0.00 sec)

在本试验中,一共select id,count(1),aa,结果group by按照规则,除了聚合函数(count(1))外,其他两列(id,aa)都应该包含在group by中,可是试验只是包含了id。

对试验结果的说明
1、包含在group by后面的id列的count(1)统计数据为正确的
2、按照正常思维,aa的数据不能展示出来,可是mysql选择了展示表中aa数据的第一条
3、上述2也是个人猜测,暂时未查到官方相关说明

mysql group by having 用法

group by就是按照不同的字段进行分组,数值可以实现汇总

例如数据库中有A表,包括学生,学科,成绩三个字段
数据库结构为
学生 学科 成绩
张三 语文 80
张三 数学 100
李四 语文 70
李四 数学 80
李四 英语 80

那么
select 学生,sum(成绩) from A group by 学生;
得到如下结果

学生 成绩
张三 180
李四 230

==============================================================

如果考虑having
语句写成:
select 学生,sum(成绩) from A group by 学生 having 成绩=80;
得到结果就是这样的

学生 成绩
张三 80
李四 160

用having比 JOIN ON 相对好理解一些,简单一些。

mysql中group by having 用法需要注意的事项:

GROUP BY:

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by后面。

比如:


select name,sum(point) from table_name

这样sql语句会报错,必须写成:


select name,sum(point) from table_name GROUP BY name

HAVING

把 HAVING 加入 SQL 的原因是,WHERE 无法应用于合计函数,而如果没有 HAVING,就无法测试结果条件。


select name,sum(point)
from table_name GROUP BY name
HAVING sum(point)>1000

having通常和group by联合使用.

标签:group,by,having
0
投稿

猜你喜欢

  • 初学者必读:提高SQL执行效率的几点建议

    2009-05-07 13:52:00
  • sql server 临时表 查找并删除的实现代码

    2024-01-17 18:49:56
  • nlp自然语言处理学习CBOW模型类实现示例解析

    2023-08-08 00:26:03
  • python使用BeautifulSoup分析网页信息的方法

    2022-02-07 11:33:40
  • pytorch 数据处理:定义自己的数据集合实例

    2021-09-11 06:10:21
  • python opencv 简单阈值算法的实现

    2023-04-04 04:23:03
  • Python常见库matplotlib学习笔记之多个子图绘图

    2023-02-17 19:40:14
  • 使用python爬取抖音视频列表信息

    2023-04-06 12:51:48
  • Python3网络爬虫之使用User Agent和代理IP隐藏身份

    2022-03-05 13:13:07
  • 如何修改vue-treeSelect的高度

    2024-05-08 09:33:55
  • Windows系统彻底卸载SQL Server通用方法(推荐!)

    2024-01-17 19:03:25
  • DBA经验:如何进行MySQL数据库表的故障检测

    2009-02-12 17:37:00
  • Python+Kepler.gl实现时间轮播地图过程解析

    2021-03-27 00:20:52
  • NumPy对数组按索引查询实战方法总结

    2021-02-23 06:33:18
  • python Gunicorn服务器使用方法详解

    2021-09-06 00:35:08
  • Python高级架构模式知识点总结

    2023-12-19 14:36:47
  • MySQL游标概念与用法详解

    2024-01-23 05:20:54
  • Python json 错误xx is not JSON serializable解决办法

    2021-06-25 21:58:05
  • 怎样安全地关闭MySQL实例

    2024-01-20 02:39:20
  • python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法

    2023-01-11 08:11:07
  • asp之家 网络编程 m.aspxhome.com