mysql中group by用法与having合用注意事项
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-02 10:59:58 浏览: 评论:0
在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联合使用.
Tags: group by用法 having
相关文章
- ·mysql GROUP BY 与 ORDER BY数据排序问题(2014-09-24)
- ·mysql关联查询中GROUP BY的例子(2014-09-24)
- ·mysql中GROUP BY 和ORDER BY 组合使用注意事项(2014-09-24)
- ·MYSQL中group by做分组查询并排序(2014-09-25)
- ·解决MySQL中无GROUP BY直接HAVING的问题(2014-09-27)
- ·mysql数据库分组,GROUP BY,查询实例(2014-09-27)
- ·mysql函数group_concat使用方法(2014-10-01)
- ·MySql中GROUP_CONCAT()函数使用详解(2014-10-03)
- ·mysql 分组group by排序取每条记录中,时间最大的一条记录(2014-10-03)
- ·mysql获取group by的总记录行数方法(2014-10-03)
- ·mysql group by 排序问题一些自我理解(2014-10-04)
- ·mysql中distinct和group by过滤删除重复行(2014-10-04)
- ·mysql group_concat函数使用方法(2014-10-08)
- ·解决mysql group by不能排序方法(2014-10-08)
- ·mysql having和group by 语句用法(2014-10-14)
- ·MySql中GROUP_CONCAT函数把多条数据显示成一条数据(2014-10-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)