MYSQL数据库mysql中group by与having合用注意事项分享

MYSQL数据库mysql中group by与having合用注意事项分享,第1张

概述介绍《MYSQL数据库mysql中group by与having合用注意事项分享》开发教程,希望对您有用。

《MysqL数据库MysqL中group by与having合用注意事项分享》要点:
本文介绍了MysqL数据库MysqL中group by与having合用注意事项分享,希望对您有用。如果有疑问,可以联系我们。

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

MysqL实例MysqL表结构

代码如下:
MysqL> desc t;
+――-+――――C+――+―C+―――+――-+
| FIEld | Type | Null | Key | Default | Extra |
+――-+――――C+――+―C+―――+――-+
| ID | int(11) | YES | | 0 | |
| name | varchar(100) | YES | | NulL | |
| aa | varchar(45) | YES | | NulL | |
+――-+――――C+――+―C+―――+――-+
3 rows in set (0.01 sec)

MysqL实例插入数据

代码如下:
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)

MysqL实例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)

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

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

MysqL实例MysqL group by having 用法

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

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

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

MysqL实例学生 成绩
张三 180
李四 230

MysqL实例==============================================================

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

MysqL实例学生 成绩
张三 80
李四 160

MysqL实例用having比 JOIN ON 相对好理解一些,简单一些.

MysqL实例MysqL中group by having 用法需要注意的事项:

MysqL实例GROUP BY:

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

MysqL实例比如:

代码如下:
select name,sum(point) from table_name

MysqL实例这样SQL语句会报错,必须写成:

代码如下:
select name,sum(point) from table_name GROUP BY name

MysqL实例HAVING

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

代码如下:
select name,sum(point)
from table_name GROUP BY name
HAVING sum(point)>1000

MysqL实例having通常和group by联合使用.

总结

以上是内存溢出为你收集整理的MYSQL数据库mysql中group by与having合用注意事项分享全部内容,希望文章能够帮你解决MYSQL数据库mysql中group by与having合用注意事项分享所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存