源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-11-19 12:59 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:mysql中group by与having合用注意事项分享
group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下: mysql表结构
[u]复制代码[/u] 代码如下:
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)
插入数据
[u]复制代码[/u] 代码如下:
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 查询语句
[u]复制代码[/u] 代码如下:
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也是个人猜测,暂时未查到官方相关说明 [b]mysql group by having 用法[/b] 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后面。 比如:
[u]复制代码[/u] 代码如下:
select name,sum(point) from table_name
这样sql语句会报错,必须写成:
[u]复制代码[/u] 代码如下:
select name,sum(point) from table_name GROUP BY name
[b]HAVING[/b] 把 HAVING 加入 SQL 的原因是,WHERE 无法应用于合计函数,而如果没有 HAVING,就无法测试结果条件。
[u]复制代码[/u] 代码如下:
select name,sum(point) from table_name GROUP BY name HAVING sum(point)>1000
having通常和group by联合使用.
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部