28圈.com

下载APP
交汇点新闻APP
交汇点新闻APP二维码

扫码下载

新华报业网微信
新华报业网微信二维码

扫码关注

GROUP BY与SUM函数搭配使用的主题技巧,,,,,,,,从此握别汇总数据时的各类疑难杂症

先说结论:GROUP BY和SUM这对组合,,,,,,,,是SQL里做数据汇总最常用的搭档,,,,,,,,但好多人用起来总是差那么点意思 。。。。 。今天直接讲透 。。。。 。

第一步,,,,,,,,搞明显GROUP BY到底在干嘛

GROUP BY的性质,,,,,,,,就是把一堆杂乱无章的纪录,,,,,,,,依照你指定的劣装归堆” 。。。。 。好比你有一张销售表,,,,,,,,里面有日期、地域、销售员、金额 。。。。 。你想知路每个地域卖了几多,,,,,,,,那就按“地域」剽个字段归堆,,,,,,,,每个地域造成一堆,,,,,,,,而后对每一堆里的金额做汇总 。。。。 。

这就像你把一大筐水果依照苹果、橘子、香蕉分隔摆,,,,,,,,而后别离数一数每种有几多个 。。。。 。单一吧???????但好多人栽在第一步:SELECT里出现的列,,,,,,,,要么呈此刻GROUP BY里,,,,,,,,要么被聚合函数包着,,,,,,,,没有第三条路 。。。。 。这条文则是铁律,,,,,,,,别跟数据库讨价还价 。。。。 。

第二步,,,,,,,,SUM的正确打开方式

SUM就是对每一堆里的数值列求和 。。。。 。把稳,,,,,,,,它只能对数致粪型的列使用,,,,,,,,你拿它去求和字符串,,,,,,,,数据库会直接报错给你看 。。。。 。

看个现实例子 。。。。 。如果你要按月份统计每个月的总销售额:

```sql

SELECT

DATE_FORMAT(order_date, '%Y-%m') AS month,

SUM(amount) AS total_amount

FROM orders

GROUP BY DATE_FORMAT(order_date, '%Y-%m');

```

这里有两个关键点 。。。。 。第一,,,,,,,,GROUP BY后面跟的是DATE_FORMAT的表白式,,,,,,,,不是单一的列名,,,,,,,,这时辰SELECT里也要写如出一辙的表白式,,,,,,,,不能直接写order_date列名 。。。。 。第二,,,,,,,,SUM(amount)是对每个月份分组内的所有订单金额逐一相加 。。。。 。

第三步,,,,,,,,GROUP BY和SUM共同的进阶场景

你以为就这么单一???????那你就太幼看这对组合了 。。。。 。真正让人头疼的是多列分组和前提聚合 。。。。 。

多列分组很单一,,,,,,,,就是在GROUP BY后面跟上多个字段 。。。。 。好比按“地域+产品类别”一路分组,,,,,,,,统计每种产品在每个地域的销量 。。。。 。

前提聚合稍微绕一点 。。。。 。好比你想统计每个地域“金额大于1000的订单”的总金额,,,,,,,,怎么写???????

```sql

SELECT

region,

SUM(CASE WHEN amount > 1000 THEN amount ELSE 0 END) AS big_order_total

FROM orders

GROUP BY region;

```

看见没???????用CASE WHEN把前提嵌进SUM里面,,,,,,,,这样只对满足前提的行求和 。。。。 。

第四步,,,,,,,,GROUP BY和SUM的常见坑

说一个最常见的坑,,,,,,,,就是分组字段没选对 。。。。 。好比你想统计每个销售员的业绩,,,,,,,,按销售员ID分组没问题 。。。。 。但若是你手滑按“销售员姓名”分组,,,,,,,,而系统里有两个同名但分歧ID的人,,,,,,,,那他们俩的业绩就会被归并在一路 。。。。 。

另一个坑跟NULL值有关 。。。。 。GROUP BY会把所有NULL值归到统一组里,,,,,,,,而SUM函数会自动忽略NULL值 。。。。 。这意味着,,,,,,,,若是你某个月的订单金额满是NULL,,,,,,,,SUM的了局是NULL而不是0,,,,,,,,这在报内外看起来就是一片空缺,,,,,,,,容易让人误会 。。。。 。

还有一个坑,,,,,,,,好多人会忽略 。。。。 。当你的数据量很大,,,,,,,,或者分组字段没建索引时,,,,,,,,GROUP BY查问会变得极度慢 。。。。 。这时辰要么给分组字段加索引,,,,,,,,要么思考用覆盖索引优化查问效能 。。。。 。

第五步,,,,,,,,跟其他聚合函数一路用

GROUP BY不只是跟SUM搭配,,,,,,,,它还能和COUNT、AVG、MAX、MIN一路工作 。。。。 。现实利用中,,,,,,,,一条SQL里时时同时出现好几个聚合函数 。。。。 。

```sql

SELECT

category,

COUNT(*) AS order_count,

SUM(amount) AS total_amount,

AVG(amount) AS avg_amount

FROM orders

GROUP BY category;

```

这样一次查问,,,,,,,,就能同时拿到每个品类的订单数、总金额和均匀金额,,,,,,,,效能极度高 。。。。 。

最后说一个好多人不知路的点 。。。。 。GROUP BY和DISTINCT某些场景下能够相互代替,,,,,,,,但语义齐全分歧 。。。。 。DISTINCT只管去沉,,,,,,,,不做聚合推算 ;;;;;GROUP BY是分组+聚合 。。。。 。你要是只想看去沉后的值,,,,,,,,用DISTINCT ;;;;;你要是想对每组数据做统计,,,,,,,,必须用GROUP BY 。。。。 。

GROUP BY和SUM的用法,,,,,,,,主题就这些 。。。。 。上手练几遍,,,,,,,,遇到问题多看看报错信息,,,,,,,,根基就稳了 。。。。 。你此刻就去试试,,,,,,,,把你的订单数据按维度拆开来看看,,,,,,,,说不定能发现一些平时把稳不到的业务法规 。。。。 。

沉磅!泰山免签31岁法国国脚签约1+1年达和谈曾随切尔西夺欧冠
GROUP BY与SUM函数搭配使用的主题技巧,,,,,,,,从此握别汇总数据时的各类疑难杂症
责编:欧阳娜
28圈-专一于开发高品质游戏
版权和免责申明

版权申明:凡起源为“交汇点、新华日报及其子报”或电头为“新华报业网”的稿件,,,,,,,,均为新华报业网独家版权所有,,,,,,,,未经许可不得转载或镜像 ;;;;;授权转载必须注明起源为“新华报业网”,,,,,,,,并保留“新华报业网”的电头 。。。。 。

免责申明:本站转载稿件仅代表作者幼我概想,,,,,,,,与新华报业网无关 。。。。 。稿件内容请读者仅作参考,,,,,,,,并自行核实有关信息 。。。。 。

新华日报28圈-专一于开发高品质游戏
图像指纹

专题

表媒曝伊朗拟购中国超音速反舰导弹,,,,,,,,中方回应

视频

泽连斯基或于2月24日颁发选举,,,,,,,,俄方:目前无靠得住新闻

近九成投顾看涨整年,,,,,,,,市场风格显露平衡迹象

好奇心日报2026-08-30 13:00:02
交汇点新闻APP二维码

扫码下载

交汇点新闻APP

28圈-专一于开发高品质游戏Android版

28圈-专一于开发高品质游戏iPhone版

【网站地图】【sitemap】