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

在mysql中group by分组查询我们经常会用到,并且还同时会与having合用,下面我介绍group by用法与having合用注意事项,希望此教程对各位朋友有所帮助。

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

mysql表结构,代码如下:

  1. mysql>desct;
  2. +——-+————–+——+—–+———+——-+
  3. |Field|Type|Null|Key|Default|Extra|
  4. +——-+————–+——+—–+———+——-+
  5. |id|int(11)|YES||0||
  6. |name|varchar(100)|YES||NULL||
  7. |aa|varchar(45)|YES||NULL||
  8. +——-+————–+——+—–+———+——-+
  9. 3rowsinset(0.01sec)

插入数据,代码如下:

  1. mysql>select*fromt;
  2. +——+——+——-+
  3. |id|name|aa|
  4. +——+——+——-+
  5. |1|aaaa|bbbb|
  6. |1|1111|2222|
  7. |1|2222|33333|
  8. |1|2222|44444|
  9. |2|2222|44444|
  10. |2|2222|1111|
  11. |3|2222|1111|
  12. |1|2222|44444|
  13. |1|2222|44444|
  14. |1|2222|44444|
  15. |3|2222|aaaa|
  16. +——+——+——-+
  17. 11rowsinset(0.00sec)

group by 查询语句,代码如下:

  1. mysql>selectid,count(1),aafromtgroupbyid;
  2. +——+———-+——-+
  3. |id|count(1)|aa|
  4. +——+———-+——-+
  5. |1|7|bbbb|
  6. |2|2|44444|--phpfensi.com
  7. |3|2|1111|
  8. +——+———-+——-+
  9. 3rowsinset(0.00sec)

在本试验中,一共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表,包括学生,学科,成绩三个字段,数据库结构为:

  1. 学生学科成绩
  2. 张三语文80
  3. 张三数学100
  4. 李四语文70
  5. 李四数学80
  6. 李四英语80

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

  1. 学生成绩
  2. 张三180
  3. 李四230

如果考虑having,语句写成:

select 学生,sum(成绩) from A group by 学生 having 成绩=80;

得到结果就是这样的:

  1. 学生成绩
  2. 张三80
  3. 李四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,就无法测试结果条件,代码如下:

  1. selectname,sum(point)
  2. fromtable_nameGROUPBYname
  3. HAVINGsum(point)>1000

having通常和group by联合使用.

相关广告
  • mysql中group by用法与having合用注意事项 mysql中group by用法与having合用注意事项 mysql中group by用法与having合用注意事项
相关阅读

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

2019/10/10 17:35:59 | 谷歌SEO算法 | 小明SEO博客