MySQL学习笔记:分组数据

本文为本人学习书籍《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;
发布了51 篇原创文章 · 获赞 34 · 访问量 887

猜你喜欢

转载自blog.csdn.net/weixin_43412569/article/details/104860308