mysql中sum用法详解

是啊,你是念经还是给我讲MySQL的SUM函数?从你写的方式来看,你正在写一份正式的文档...
上周,一位客户问我为什么他使用SUM(销售)时的结果总是错误。
后来我发现他的表中的sales列全是NULL,所以结果就变成了NULL。
这提醒我,在使用 SUM 函数时,永远不要忘记处理 NULL 值。

想一想,SUM(column_name) 只是加法,添加一个非空的数字列表。
例如,如果您输入 SELECT SUM(sales) FROM sales_table;,您想要添加 sales_table 表中的所有非 NULL 销售值。
是不是很简单呢?
主要特点,第一是忽略NULL值。
你的表中是否有空值? SUM 不在乎,跳过它即可。
第二个是可以添加负数。
SUM(-5 , 1 0) 是 5 您不需要学习这个,对吗?但是,如果您在其中放入字符串(例如“Sales1 2 3 ”),结果将为 NULL,因为 SUM 不知道如何将字符串作为数字相加。

在高级用法中,我最常将它与 WHERE 一起使用。
例如,如果我只想计算大于 1 00 的销售额,我会编写 SELECT SUM(sales) FROM sales_table WHERE sales > 1 00;,并在过滤后添加它们。
还有GROUP BY。
例如,要按客户组计算销售额,请输入 SELECT customer_id, SUM(sales) FROM sales_tab GROUP BY customer_id;,以便计算每个客户的总销售额。

我刚刚发现你的窗口功能。
SUM(sales) OVER(PARTITION BY customer_id ORDER BY BY) 的编写方式非常酷。
它计算每个客户的累计销售额。
不过,仅 MySQL 8 .0+ 支持,早期版本可能无法执行此操作。

就预防措施而言,我遇到的最大陷阱是没有对大表建立索引。
想一想,SUM函数需要将数字一一相加。
如果表有几百万行,会不会崩溃?因此,在对大表使用SUM之前,最好在目标列上添加索引。
您还应该注意数据类型。
非数字类型会直接报错。
不要以为MySQL会自动帮你转换。
这是不可能的。

另一个很酷的操作是处理 NULL 值。
例如,如果需要将空值计为0,只需输入SELECT SUM(COALESCE(sales, 0)) FROM sales_table;,将NULL替换为0,然后添加即可。

FAQ中,分组后的结果是错误的。
我很可能忘记输入 GROUP BY。
看你的例子,错误demo是没有GROUP BY,直接报错;修改后的版本与GROUP BY不同。

无论如何,你都能理解。
一旦使用了SUM函数,数据分析就是小菜一碟了。
如果您有任何具体问题,我会向您解释。

group_concat的用法

上周,一位客户向我询问MySQL的GROUP_CONCAT功能,我向他详细解释了这一点。
首先,GROUP_CONCAT函数就像MySQL中的粘合剂,可以将多行数据组合成一个字符串。

1 .先说一下基本用法。
这个函数有几个参数,第一个是字段名,就是你要合并的字段;然后是DISTINCT,这个可选参数可以帮助你去除重复数据; ORDER BY也是可选的,它用于指定数据排序规则;最后是SEPARATOR,该参数用于定义连接字符串分隔符。

2 它有几个主要功能。
例如,您可以使用CONCAT_GROUP将所有产品名称组合在同一订单中,这样您就可以在订单详细信息中看到订单中包含哪些产品。
如果您不希望重复的产品名称,可以使用 DISTINCT 删除重复项。
此外,您还可以按 ORDER BY 排序并使用 SEPARATOR 指定每个产品名称之间的分隔符。

3 使用GROUP_CONCAT时有几点需要注意。
首先,这个函数的结果的长度是有限的。
默认值为 1 02 4 个字符。
如果数据太长,系统会自动截断。
您可以通过设置 group_concat_max_len 系统变量来调整此长度。
此外,处理大量数据时,GROUP_CONCAT 可能会影响性能,因此请小心。

无论如何,GROUP_CONCAT是MySQL中一个非常方便的函数,特别是在处理数据聚合需求时。
使用得好,它可以让你更有效地处理数据。