MySQL怎样分组汇总数据 GROUP BY与聚合函数实战

上星期。
MySQL即查询。
超级慢。

分组依据。
这非常重要。

我的那个朋友。
公司年会。
使用 GROUP BY。

1 .如何按 GROUP BY 进行分组
扫描列。
值是一样的。
集合成一个团体。

例如。
水果。
苹果。
团体。

未指定功能。
返回哪一行。
这取决于系统。

示例。
客户订单。

sql SELECT customer_id, SUM(order_amount) AS 总金额 来自订单 按客户 ID 分组;
2 . 如何选择
COUNT()作为聚合函数。
计算行数。

SUM()。
和。

AVG()。
平均值。

最大()/最小()。
最大值和最小值。

GROUP_CONCAT()。
字符串连接。

选择哪一个。
这取决于需求。

3 如何过滤 HAVING
过滤分组结果。

与 WHERE 类似。
但分组后。

示例。
金额大于1 000.
sql SELECT customer_id, SUM(order_amount) AS 总金额 来自订单 按 customer_id 分组 HAS SUM(订单金额) > 1 000;
WHERE 和 HAVING 之间的区别。

哪里。
分组前过滤。

拥有。
按分组过滤。

4 如何处理 NULL 值
NULL。
一个单独的组。

示例。
计算零订单。

sql SELECT customer_id, COUNT() AS order_count 来自订单 按客户 ID 分组;
排除 NULL。
使用何处。

sql SELECT customer_id, COUNT() AS order_count 来自订单 其中 customer_id 不为空 按客户 ID 分组;
5 、如何使用GROUP BY和JOIN连接表。
再次组团。

示例。
客户订单金额。

sql SELECT c.customer_name, SUM(o.order_amount) AS 总金额 FROM 客户 c JOIN 订单 o ON c.customer_id = o.customer_id 按 c.customer_name 分组;
注意。
条件条件。

6 如何优化 GROUP BY
索引。
加速分组。

避免 WHERE 函数。
索引无效。

在哪里使用。
提前过滤。

复杂的搜索。
分享。

调整配置。
增加缓冲。

算了。
由你决定。

MySQL分组、排序

GROUPBY,说白了就是将数据按照某个字段分组成堆。
这就像在 Excel 中制作数据透视表并将类似的数据放在一起。
MySQL中使用GROUPBY时,一般需要使用聚合函数,否则就没用了。

我们先来看一个例子。
假设有一个省份表,列出了省份和对应的地区。
如果GROUPBY单独使用,比如GROUPBY Region,结果只会显示每个Region的第一条记录。
您想参观全国多少个地区? SQL是这样写的:
sql 从省份表 GROUPBY 区域中选择区域;
如果你想使用聚合函数,你必须将它们与它一起使用。
例如,要使用省份表计算每个地区的省份数量,就必须使用COUNT函数:
sql SELECT Region, COUNT() AS 省份数量 FROM Province 表 GROUPBY Region;
还有GROUP_CONCAT,还是比较实用的。
它可以将每个地区下的省份名称串成一行,并用分号分隔。
例如:
sql SELECT Region, GROUP_CONCAT(province SEPARATOR ';') AS 省份列表 FROM 省份表 GROUPBY 地区;
WITHROLLUP 就更好玩了,它可以在最后添加一行总计。
例如:
sql SELECT 地区,COUNT() FROM 省份表 GROUPBY 地区WITHROLLUP;
HAVING 的用途是什么? 它过滤分组的结果。
WHERE是分组前过滤的,HAVING是分组后过滤的。
例如省份数量超过7 个地区:
sql SELECT 地区,COUNT() FROM 省份表 GROUPBY 地区 HAVING COUNT() >= 7 ;
通常必须对聚合的数据进行排序。
例如按省份数量从多到少排序:
sql SELECT 地区, COUNT() FROM 省份表 GROUPBY 地区 ORDERBY COUNT() DESC;
仅此而已。
说实话,一开始我并不太想明白WITHROLLUP是干什么用的,但是直到尝试之后才明白。