在本教學中將學習如何使用Oracle HAVING子句過濾由GROUP BY子句返回分組。
Oracle HAVING子句簡介
HAVING子句是SELECT語句的可選子句。它用於過濾由GROUP BY子句返回的行分組。 這就是為什麼HAVING子句通常與GROUP BY子句一起使用的原因。
以下說明了OracleHAVING子句的語法:
SELECT
column_list
FROM
T
GROUP BY
c1
HAVING
group_condition;
在這個語句中,HAVING子句緊跟在GROUP BY子句之後。如果使用不帶GROUP BY子句的HAVING子句,則HAVING子句將像WHERE子句那樣工作。
請注意,HAVING子句過濾分組的行,而WHERE子句過濾行。這是HAVING和WHERE子句之間的主要區別。
Oracle HAVING子句的例子
我們將使用示例資料庫中的order_items表進行演示。

1. 簡單的Oracle HAVING示例
以下語句使用GROUP BY子句從order_items表中檢索訂單及其總金額的值:
SELECT
order_id,
SUM( unit_price * quantity ) order_value
FROM
order_items
GROUP BY
order_id
ORDER BY
order_value DESC;
執行上面查詢語句,得到以下結果 -

要查找總金額值大於1百萬的訂單,請按如下所示添加HAVING子句:
SELECT
order_id,
SUM( unit_price * quantity ) order_value
FROM
order_items
GROUP BY
order_id
HAVING
SUM( unit_price * quantity ) > 1000000
ORDER BY
order_value DESC;
執行上面查詢語句,得到以下結果 -

在這個例子中:
- 首先,
GROUP BY子句通過訂單的ID對訂單進行分組,並使用SUM()函數計算每個訂單的總金額。 - 然後,
HAVING子句過濾所有值小於或等於1,000,000的訂單。
2. Oracle HAVING具有複雜的條件示例
可以在HAVING子句中使用複雜過濾條件來過濾分組。
例如,以下語句查找值大於500,000的訂單,並且每個訂單中的產品數量在10到12之間:
SELECT
order_id,
COUNT( item_id ) item_count,
SUM( unit_price * quantity ) total
FROM
order_items
GROUP BY
order_id
HAVING
SUM( unit_price * quantity ) > 500000 AND
COUNT( item_id ) BETWEEN 10 AND 12
ORDER BY
total DESC,
item_count DESC;
執行上面查詢語句,得到以下結果 -

在本教學中,您學習了如何使用Oracle HAVING子句過濾由GROUP BY子句返回的行分組。
上一篇:
Oracle Group By子句
下一篇:
Oracle子查詢
