不是单组组函数oracle和子查询和

时间:2014-10-16 21:27:58

标签: mysql oracle group-by subquery

为什么这个查询在Oracle中有错误,但在MySQL中是否正确?

SELECT (select sum(total)
FROM   invoices) + sum(total)
FROM invoices;

3 个答案:

答案 0 :(得分:0)

(select sum(total) FROM invoices)是一个表达式,它不是聚合函数,它在GROUP BY中不存在(实际上你不能在GROUP BY中使用子查询)

所以你试图将聚合和非聚合表达式混合在一起。

答案 1 :(得分:0)

  

为什么这个查询在oracle和mysql中有错误是正确的

因为MySQL很容易混合聚合和非聚合列。

引用the documentation

  

在标准SQL中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的非聚合列。

     

[...]

     

MySQL扩展了GROUP BY的使用,因此选择列表可以引用未在GROUP BY子句中命名的非聚合列。

     

[...]

     

这主要适用于每个未在GROUP BY中命名的非聚合列中的所有值对于每个组都相同的情况。 服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的

答案 2 :(得分:0)

如果您在Oracle中寻找工作版本,可以这样做:

select sum(total) + sum(total)
from invoices;