Aggregate

在 SQL 查詢中使用沒有 GROUP BY 的 HAVING

  • October 7, 2015

為了HAVING在 SQL 查詢中使用,必須有一個GROUP BY聚合列名嗎?

是否有任何特殊情況可以在HAVING沒有GROUP BYSQL 查詢的情況下使用?

它們必須同時存在嗎?

不。

它們不必共存,正如 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;

在這種情況下您需要替換wherehaving,如下所示:

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;

您可以看到 usinghaving只是最後一個查詢的簡寫版本。


總之,在階段之後having應用,而在階段之前應用。group by``where``group by

引用自:https://dba.stackexchange.com/questions/57445