Group by:对Select查询出来的数据集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
我们需要注意的是:在使用Group By的SQL语句中,select中返回的字段,必须满足以下两个条件之一:
- 包含在Group By语句的后面,作为分组的依据;
- 这些字段包含在聚合函数中。常见的聚会函数有:count,sum,MAX, AVG等
select city, count(*)from user where age=22 group by city
如果你这样查询是错误的:select city,age, count(*)from user where age=2 group by city
提示错误:选择列表中的列 ‘user .age’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
Having:用于对where和group by查询出来的分组经行过滤,查处出满足条件的分组结果。所以Having的使用需要注意以下几点:
- Having**只能用于Group By** (分组统计语句中)
- WHERE 是用于在初始表中筛选查询,HAVING用于在WHERE和GROUP BY 结果分组中查询
- Having 子句中的每一个元素也必须出现在select列表中
- Having语句可以使用聚合函数,而where不使用。
select city, count(*) from user where age=22 group by city having count(*)>4
如果你这样查询是错误的:select city, count(*) from user where age=22 group by city having age>4
提示错误:HAVING 子句中的列 ‘user .age’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。