Aggregate
在 SQL 查詢中使用沒有 GROUP BY 的 HAVING
為了
HAVING
在 SQL 查詢中使用,必須有一個GROUP BY
聚合列名嗎?是否有任何特殊情況可以在
HAVING
沒有GROUP BY
SQL 查詢的情況下使用?它們必須同時存在嗎?
不。
它們不必共存,正如 Oracle 中的以下查詢有效的事實所證明的那樣:
select * from dual having 1 = 1;
同樣,在 PostgreSQL 中,以下查詢有效:
select 1 having 1 = 1;
所以
having
不需要 。_group by
Have在聚合階段之後應用 ,如果要過濾聚合結果,則必須使用它。所以反過來是不正確的,以下將不起作用:
select a, count(*) as c from mytable group by a where c > 1;
在這種情況下您需要替換
where
為having
,如下所示:select a, count(*) as c from mytable group by a having c > 1;
注意以下查詢表格也可以使用:
select * from ( select a, count(*) as c from mytable group by a ) where c > 1;
您可以看到 using
having
只是最後一個查詢的簡寫版本。總之,在階段之後
having
應用,而在階段之前應用。group by``where``group by