为什么这个查询在Oracle中有错误,但在MySQL中是否正确?
SELECT (select sum(total)
FROM invoices) + sum(total)
FROM invoices;
答案 0 :(得分:0)
(select sum(total) FROM invoices)
是一个表达式,它不是聚合函数,它在GROUP BY中不存在(实际上你不能在GROUP BY中使用子查询)
所以你试图将聚合和非聚合表达式混合在一起。
答案 1 :(得分:0)
为什么这个查询在oracle和mysql中有错误是正确的
因为MySQL很容易混合聚合和非聚合列。
在标准SQL中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的非聚合列。
[...]
MySQL扩展了GROUP BY的使用,因此选择列表可以引用未在GROUP BY子句中命名的非聚合列。
[...]
这主要适用于每个未在GROUP BY中命名的非聚合列中的所有值对于每个组都相同的情况。 服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。
答案 2 :(得分:0)
如果您在Oracle中寻找工作版本,可以这样做:
select sum(total) + sum(total)
from invoices;