MYSQL学习_聚合与结果排序
参考MICK的SQL基础教程,进行SQL的基础学习。
Product表:
为聚合结果指定条件
HAVING子句
WHERE
子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)。
因此,对集合指定条件就需要使用其他的子句了,此时便可以用HAVING
子句。
使用 HAVING 子句时 SELECT 语句的顺序
SELECT
→ FROM
→ WHERE
→ GROUP BY
→ HAVING
并且HAVING
子句中能够使用的 3 种要素如下所示。
● 常数
● 聚合函数
● GROUP BY
子句中指定的列名(即聚合键)
从按照商品种类进行分组后的结果中,取出“包含的数据行数为2。
行”的组
SELECT
product_type,
COUNT(*)
FROM
product
GROUP BY
product_type
HAVING
COUNT(*) = 2;
Out:
WHERE
子句 = 指定行所对应的条件
HAVING
子句 = 指定组所对应的条件
注:将条件写在 WHERE
子句中要比写在 HAVING
子句中的处理速度更快,返回结果所需的时间更短。
对查询结果进行排序
ORDER BY子句
SELECT
→ FROM
→ WHERE
→ GROUP BY
→ HAVING
→ORDER BY
降序,在列名后面使用 DESC
关键字
SELECT
product_id,
product_name,
sale_price,
purchase_price
FROM
Product
ORDER BY
sale_price DESC;
指定多个排序键
SELECT
product_id,
product_name,
sale_price,
purchase_price
FROM
Product
ORDER BY
sale_price, product_id;
Out:
注:排序键中包含NULL时,会在开头或末尾进行汇总。
在排序键中使用显示用的别名
SELECT
product_id AS ID,
product_name,
sale_price AS "价格",
purchase_price
FROM
Product
ORDER BY
ID,
"价格"
之所以不能在GROUP BY
中使用别名, 是因为使用 HAVING
子句时 ,内部的执行顺序为
FROM
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT
→ ORDER BY
不推荐使用列编号,在 SQL-92A 中已经明确指出
该排序功能将来会被删除。
SELECT
product_id AS ID,
product_name,
sale_price AS "价格",
purchase_price
FROM
Product
ORDER BY
3
Out:
按照 SELECT 子句中第 3 列的升序进行排列