为何sum(100,300,200)报错?MySQL中‘set of values’指什么?
为什么你的SUM语句报错?以及什么是SQL里的“值的集合”
你写的select sum(100,300,200);报错的核心原因很简单:MySQL的SUM()聚合函数只接受单个参数,而且这个参数必须是能代表一组值的表达式,不是直接塞一堆逗号分隔的数字。
文档里说的“值的集合”,指的是来自多行数据的一组值,常见的有这几种情况:
- 表中某一列的所有值:比如你有个存储数字的表,假设表名叫
nums,列名叫value,里面存了100、300、200这三条数据,那SELECT SUM(value) FROM nums;就能正确算出总和——这里value对应的就是该列所有行的值组成的集合。 - 用子查询/临时构造的多行值集合:如果没有现成的表,你可以用
UNION ALL把单个数字拼成虚拟的多行数据,再用SUM统计:
SELECT SUM(num) FROM ( SELECT 100 AS num UNION ALL SELECT 300 UNION ALL SELECT 200 ) AS temp_table;
这里子查询返回的三行数据就是一个标准的“值的集合”,SUM可以正常处理。
另外,如果只是想算几个固定数字的和,完全没必要用聚合函数,直接用加法运算符就行:SELECT 100 + 300 + 200;,这才是最适合这个场景的写法。
聚合函数的设计初衷是处理批量行数据的统计(比如统计某列的总和、平均值),不是用来替代计算器做简单加法的。
内容的提问来源于stack exchange,提问作者Stefan Jankovic
相关产品推荐
相关产品推荐

