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实例对试验结果的说明 MYSQL实例mysql group by having 用法 MYSQL实例group by就是按照不同的字段进行分组,数值可以实现汇总 MYSQL实例例如数据库中有A表,包括学生,学科,成绩三个字段 MYSQL实例那么 MYSQL实例学生 成绩 MYSQL实例============================================================== MYSQL实例如果考虑having MYSQL实例学生 成绩 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联合使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |