分组允许把数据分为多个逻辑组,以便对每个组进行聚集计算。
例如我们查下每个系里有多少名学生:
在使用group by 子句之前,还需要知道一些规定:
1. group by 子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更为细致的控制。
2. 如果在group by子句中嵌套了分组,数据将在最后规定的分组上进行汇总。
3. group by 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)
4. select 语句中的每个列都必须在group by子句中给出。
5. 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL值,它们将分为一组。
6. group by 子句必须出现在where子句之后,order by 子句之前
使用with rollup关键字,可以得到每个分组以及每个分组汇总级别的值:
在上面我们说过了group by在where之后,所以我们都用having来进行数据过滤,having支持所有where操作符
我们选择系里超过2个人的系。
where 和 having的区别:having在数据分组后进行过滤。
select 子句顺序:
子句 说明 是否必须使用
select 要返回的列或表达式 是
from 从中检索数据的表 仅在从表选择数据时使用
where 行级过滤 否
group by 分组说明 仅在按组计算聚集时使用
having 组级过滤 否
order by 输出排序顺序 否
limit 要检索的行数 否