HAVING 子句 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

HAVING 子句

HAVING 子句會將條件套用至查詢傳回的中繼分組結果集。

語法

[ HAVING condition ]

例如,您可以限制 SUM 函數的結果:

having sum(pricepaid) >10000

HAVING 會在套用所有 WHERE 子句條件且完成 GROUP BY 操作之後套用。

條件本身會採用與任何 WHERE 子句條件相同的形式。

使用須知

  • HAVING 子句條件中參考的任何資料欄必須是分組資料欄,或是參考彙整函數結果的資料欄。

  • 在 HAVING 子句中,您無法指定:

    • 參考選取清單項目的序數。只有 GROUP BY 和 ORDER BY 子句接受序數。

範例

以下查詢會依名稱計算售票總金額,然後消除總金額低於 800,000 USD 的活動。HAVING 條件會套用至選取清單中彙整函數的結果:sum(pricepaid)

select eventname, sum(pricepaid) from sales join event on sales.eventid = event.eventid group by 1 having sum(pricepaid) > 800000 order by 2 desc, 1; eventname | sum -----------------+----------- Mamma Mia! | 1135454.00 Spring Awakening | 972855.00 The Country Girl | 910563.00 Macbeth | 862580.00 Jersey Boys | 811877.00 Legally Blonde | 804583.00

以下查詢會計算類似的結果集。不過,在此情況下,HAVING 條件會套用至選取清單中未指定的彙整:sum(qtysold)。未銷售超過 2,000 張票的活動將從最終結果中消除。

select eventname, sum(pricepaid) from sales join event on sales.eventid = event.eventid group by 1 having sum(qtysold) >2000 order by 2 desc, 1; eventname | sum -----------------+----------- Mamma Mia! | 1135454.00 Spring Awakening | 972855.00 The Country Girl | 910563.00 Macbeth | 862580.00 Jersey Boys | 811877.00 Legally Blonde | 804583.00 Chicago | 790993.00 Spamalot | 714307.00

以下查詢會依名稱計算售票總金額,然後消除總金額低於 800,000 USD 的活動。HAVING 條件會套用至使用別名 pp for 的選取清單中彙總函式的結果sum(pricepaid)

select eventname, sum(pricepaid) as pp from sales join event on sales.eventid = event.eventid group by 1 having pp > 800000 order by 2 desc, 1; eventname | pp -----------------+----------- Mamma Mia! | 1135454.00 Spring Awakening | 972855.00 The Country Girl | 910563.00 Macbeth | 862580.00 Jersey Boys | 811877.00 Legally Blonde | 804583.00