A、分组语句:GROUP BY
1、如果分组列中包含NULL值行,会将其作为一个分组返回;
2、GROUP BY语句必须位于WHERE 子句之后,ORDER BY子句之前;
3、group By 子句中列出的每一列都必须是检索列或是有效表达式,不能是聚集函数。
若在select中使用表达式,须在GROUP BY子句中指定相同的表达式,不能使用别名。
B、过滤分组语句:HAVING
1、所有适用于WHERE的规则适用于HAVING
2、两者差别在于,前者过滤行,后者配套GROUP BY过滤组
3、基于过滤分组的作用,不能指定列名,或者某列
C、目前所学各子句之间的前后次序:
SELECT 要返回的咧或者表达式
FROM 从中检索数据的表
WHERE 行级过滤
GROUP BY 分组说明
HAVING 组级过滤
ORDER BY 输出排序
例子:
1、SELECT order_num, COUNT(*)AS order_lines #order_num 为订单号,并指定别名order_lines订单行数;
FROM Orderitems
GROUP BY order_num
ORDER BY order_lines; #对所有订单号进行分组返回行数并按订单号排序;
2、
SELECT order_num, SUM(item_price*quantity) AS total_price FROM OrderItems GROUP BY order_num HAVING SUM(item_price*quantity) >= 1000 ORDER BY order_num; #按订单号排序并返回所有订单中总价格大于1000的订单号;