如何在MySQL中不依赖表数据用SELECT创建列表并计算求和?
在MySQL中无需数据表构造列表并使用聚合函数的方法
当然可以在MySQL中不依赖现有数据表,直接构造数据列表并使用聚合函数计算,下面是几种可行的实现方式,以及对你之前写法错误的说明:
方法一:使用UNION ALL构造行集
通过UNION ALL将每个数值作为单独的行返回,再对这一列行值求和:
SELECT SUM(num) FROM ( SELECT 3 AS num UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 7 ) AS temp;
这里需要注意两点:
- 每个
SELECT返回单行单列的数值,并统一列别名(如num) - 子查询必须指定别名(如
temp),MySQL要求FROM后的子查询必须有别名
方法二:使用VALUES子句(MySQL 8.0.19+支持)
MySQL 8.0.19及以上版本支持VALUES子句直接构造行集,写法更简洁:
SELECT SUM(num) FROM (VALUES (3), (8), (9), (7)) AS temp(num);
VALUES (3), (8)...会生成一个包含四行单列的临时数据集,后续通过别名temp(num)指定表名和列名,即可用SUM求和。
你之前写法错误的原因
SELECT SUM(*) FROM (SELECT 3, 8, 9, 7):
子查询返回的是一行四列的数据,而SUM(*)是对行的数量进行聚合(而非列值相加),同时MySQL要求FROM后的子查询必须有别名,所以会直接报错。SELECT SUM((SELECT 3, 8, 9 ,7)):
内层子查询返回多列结果,而SUM函数仅能接受单个表达式作为参数,无法处理多列输入,因此执行失败。
内容的提问来源于stack exchange,提问作者irrbloss
相关产品推荐
相关产品推荐

