在本教學中將學習如何使用Oracle HAVING
子句過濾由GROUP BY
子句返回分組。
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
子句之間的主要區別。
我們將使用範例資料庫中的order_items
表進行演示。
以下語句使用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
的訂單。可以在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
子句返回的行分組。