2017-08-13 131 views
7

有人能解释为什么这个查询需要Oracle中的GROUP BY子句,而MSSQL,MySQL和Postgresql中完全正常吗?为什么这个查询需要Oracle中的group by子句

select count(*)/(select count(*) from dual)from dual 

甲骨文抱怨

"[Error] Execution (1: 27): ORA-00937: not a single-group group function" 

如果我改变它,通过这样的

select count(*)/(select count(*) from dual)from dual 
group by null 

那么它的罚款甲骨文添加虚拟组。为什么Oracle需要这个组?

+0

您能否提供真正的查询,您的示例没有任何意义。 –

+0

我提供了这一个,使其尽可能抽象,但当然这里来自Northwind DB。从OrderDetails中选择总和(UnitPrice *数量)/(从订单中选择数量(*)) – olek

+0

@WernfriedDomscheit - 如果使用任何实际表格更改'dual',结果将是相同的 –

回答

0

MySQL有一些在ANSI SQL中无效的语法。 基本上,在这里,你有一个count(*)这是一个聚合函数。一个人,它不需要group by,但如果你添加select count(*)这可能取决于你的线路 - 这里不是这种情况,但你可以在内部进行连接 - 那么你的第二个select不是一个常数,你应该group by

0

据我所知,你的第一个查询:

select count(*)/(select count(*) from dual)from dual 

的SQL将明白计数()作为一列,(从双SELECT COUNT())为第二个柱=>您必须组第二栏。

例如:

select count(*), (select count(1) from dual)from dual 

它会抛出同样的错误。但是,如果你按第二栏进行分组,那将是事实。示例

select count(*), (select count(1) from dual)from dual 
group by 1