sql sum函数的用法

说白了,SUM函数就是SQL中的“金钱计算器”,直接将一列数字相加。

要发展它,有两点很重要:首先用对地方,然后发挥条件。
去年我们跑了一个电商报表项目,用SUM(count)直接计算总访问量。
我们发现3 000级的数据直接崩溃了——用行话来说,这叫雪崩效应。
事实上,前面的一个小小的延迟就会导致一切都落后。
后来我发现,添加一个GROUP BY分类列,比如“用户级别”,然后计算每个级别的访问次数,查询的速度立刻就上手了。
还有一个更重要的细节。
例如,如果你想计算“订单总计”的金额,但有些订单状态是“已取消”(NULL值),SUM会自动忽略它,但如果你只想计算“已付款”,则需要添加HAVING子句并将条件写清楚。

一开始我以为SUM是一个简单的加法器,后来发现它还可以和窗口函数结合,比如先除后求和,让数据透视分析更加流畅。
等等,还有一件事。
如果列中有特殊值如“-1 ”代表“无效数据”,直接SUM会爆炸。
您必须先使用 CASE WHEN 来排除它。

建议以后在使用SUM之前,先检查一下数据的质量,而不是只看结果。

SQL中sum函数如何使用 数值求和函数应用指南

哎呀,这个SQL SUM函数刚开始学的时候让我很头疼。
但使用多次后,我发现它非常方便。
让我告诉你我当时遇到的陷阱,给你一些见解。

当时我刚刚加入公司,接手了这个烂摊子。
有一个报告可以计算所有订单的总金额,所以我就这样写: sql SELECT SUM(amount) FROM Orders;
结果报告出来了,金额是正确的,但是一个订单的金额为NULL。
我很困惑,为什么总量少了?后来老板向我指出,SUM函数默认忽略NULL值,只统计非NULL值。
我明白了这一点,我当时真是个菜鸟。

后来,有客户投诉他的订单金额计算不正确。
我一看,心想,哦,这家伙的订单金额有时是零。
我就在想,如果NULL可以当0呢?当时我使用了COALESCE函数: sql SELECT SUM(COALESCE(amount, 0)) FROM Orders;
这很好,NULL 值被视为 0,客户很满意。

后来有报告来计算每天的总金额,所以我写道: sql SELECT order_date, SUM(amount) FROM Orders GROUP BY order_date;
结果发现有几天没有订单,SUM计算为NULL。
这是不可能的,报告上不能有 NULL。
我使用了子查询: sql SELECT order_date, COALESCE((SELECT SUM(amount) FROM order WHERE o.order_date = d.order_date), 0) AS 总金额 FROM (SELECT DISTINCT order_date FROMorders) d;
这样就计算每天的总金额,没有订单的那天显示0。
那个时候真的很辛苦。

还有一次需要计算唯一订单总数,所以我使用了 DISTINCT: sql SELECT SUM(DISTINCT amount) FROM Orders;
结果发现有些金额在很多订单中都是重复的,这是错误的。
后来发现实际需求是计算不重复金额的总和,于是改了一下SQL,果然正确了。

最搞笑的是,有位新同事曾经写过SQL,直接把非数字列扔进SUM。
结果,系统崩溃了。
我告诉他SUM只能统计数字类型,非数字列会报错。
直到那时他才改变了主意。

所以,在使用SUM函数时,应该注意几点: 1 . 默认情况下会忽略 NULL 值。
要将它们计为 0,请使用 COALESCE 或 IFNULL。
2 . 空数据集返回NULL,必须使用子查询或CASE语句进行处理。
3 . 要计算唯一值的总和,请使用 DISTINCT。
4 、SUM只能统计数字类型,非数字列会报错。
5 、分组查询时,非聚合列必须出现在GROUP BY中。
6 、HA是过滤分组后的结果,WHERE是过滤分组前的数据。

这些陷阱我都踩过。
如果你记住它们,你就会避开它们。

sql中的sum函数的用法