一、GROUP BY基础
使用GROUP BY字句可以像切蛋糕那样将表分割。通过使用聚合函数和GROUP BY字句,可以根据某一列的分类将表分割后再进行汇总
# 基本语法
select <列名1>,<列名2>,<列名3>,... from <表名> group by
<列名1>,<列名2>,<列名3>,...
# 实例
select product_type,count(*) from product group by product_type;
这样,GROUP BY 子句就像切蛋糕那样将表进行了分组
注:
-
GROUP BY必须写在WHERE语句的后面
-
GROUP BY和WHERE并用时,SELECT语句的执行顺序:FROM->WHERE->GROUP BY->SELECT
- 先通过FROM选中表
- 再用WHERE做条件,筛选出符合条件的数据
- 然后通过GROUP BY选中的列分组
- 最后用SELECT查询出结果
-
当聚合键中包含NULL时,NULL也算一种类别,会被表现出来
二、为聚合结果指定条件(HAVING)
WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件
想要对分组后的每组进行条件指定需要使用HAVING语句,其语法与WHERE语句相似,但是其必须跟在GROUP BY语句之后,执行顺序也是先执行完GROUP BY再执行HAVING。
# 语法形式
select <列名1>,<列名2>,... from <表名> where <行的筛选条件>
group by <列名1>,<列名2>,... HAVING <组的筛选条件>
# 实例,如无需使用where可以省略
select product_type,count(*) from product
group by product_type having count(*) = 2;
总结:
- 聚合函数可以用在SELECT字句、HAVING字句和GROUP BY字句中使用
- HAVING字句要跟在GROUP BY之后
- WHERE子句用来指定数据行的条件,HAVING子句用来指定分组的条件