2017-08-13 91 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