未使用的欄位在GROUP BY中不可用,SELECT但在 中可用WHERE。這是有道理的,因為WHEN之前出現GROUP BY但不應該HAVING能夠訪問該行的“其他”列。
例子
下面是有效的。
select fid, count(*)
from class
inner join faculty using (fid)
group by fid
having every(class.room = 'R128')
但不能這樣做。
select fid, count(*)
from class
inner join faculty using (fid)
group by fid
having class.room = 'R128' // Changed Line
上述代碼段的錯誤訊息:
RROR: column "class.room" must appear in the GROUP BY clause or be used in an aggregate function
LINE 7: having class.room = 'R128'
^
SQL state: 42803
Character: 86
我沒有陷入XY 問題,我想知道為什么這是不可能的(問題是正確的,every()后來的問題在語意上也是錯誤的)
uj5u.com熱心網友回復:
having用于過濾分組的結果。
但是,該room列既不是聚合的一部分,也不是GROUP BY.
every()是一個聚合函式,因此它在having子句中是允許的。
uj5u.com熱心網友回復:
您只能在 HAVING 子句中使用聚合函式,并且“every”是一個聚合函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449523.html
標籤:sql PostgreSQL 有
上一篇:決議具有多個id的表中的JSON
