加入收藏 | 设为首页 | 会员中心 | 我要投稿 鞍山站长网 (https://www.0412zz.com/)- 应用安全、运维、云计算、5G、云通信!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-06-18 09:06:31 所属栏目:MySql教程 来源:互联网
导读:在mysql中group by分组查询我们经常会用到,并且还同时会与having合用,下面我介绍group by用法与having合用注意事项,希望此教程对各位朋友有所帮助。 group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于
  在mysql中group by分组查询我们经常会用到,并且还同时会与having合用,下面我介绍group by用法与having合用注意事项,希望此教程对各位朋友有所帮助。
 
  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 | --phpfensi.com
  | 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联合使用.

(编辑:鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读