本文为本人学习书籍《MySQL必知必会》笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~
13 分组数据
13.1 GOUP BY()数据分组
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
GROUP BY ValidityUnit;
#使用GOUP BY()语句必须在WHERE之后,ORDER BY之前
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
WHERE ValidityUnit >0
GROUP BY ValidityUnit
ORDER BY ValidityUnit DESC;
13.2 使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
GROUP BY ValidityUnit WITH ROLLUP;
13.3 HAVING关键字过滤分组
所有的WHERE子句都可用HAVING替代。唯一不同是,WHERE过滤行,HAVING过滤分组。WHERE在数据分组前过滤,HAVING在数组后过滤。
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
GROUP BY ValidityUnit;
#对比上下,上例显示所有分组;下例过滤出分组的num_product大于100的分组。
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
GROUP BY ValidityUnit
HAVING num_product>100;
下例:WHRE过滤Price1>10的所有行,然后GROUP BY按照ValidityUnit对行分组,最后HAVING过滤出分组的num_product大于50的分组。WHERE在数据分组前过滤,HAVING在数组后过滤。
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
WHERE Price1>10
GROUP BY ValidityUnit
HAVING num_product>50;
13.4 千万不要忘记ORDER BY:ORDER BY是保证数据正确排序的唯一方法。
SELECT ValidityUnit,COUNT(*) AS num_product
FROM product
WHERE Price1>10
GROUP BY ValidityUnit
HAVING num_product>50
ORDER BY num_product DESC;
13.5 目前学过的SELECT子句顺序:
SELECT–FROM–WHERE–GROUP BY–HAVING–ORDER BY–LIMIT
SELECT ValidityUnit,
COUNT(*) AS num_product
FROM product
WHERE Price1>10
GROUP BY ValidityUnit
HAVING num_product>50
ORDER BY num_product DESC
LIMIT 0,3;