在本教學中,將學習如何使用SQL Server HAVING
子句根據指定的條件篩選組。
HAVING
子句通常與GROUP BY子句一起使用,以根據指定的條件列表過濾分組。 以下是HAVING
子句的語法:
SELECT
select_list
FROM
table_name
GROUP BY
group_list
HAVING
conditions;
在此語法中,GROUP BY
子句將行匯總為分組,HAVING
子句將一個或多個條件應用於這些每個分組。 只有使條件評估為TRUE
的組才會包含在結果中。 換句話說,過濾掉條件評估為FALSE
或UNKNOWN
的組。
因為SQL Server在GROUP BY
子句之後處理HAVING
子句,所以不能通過使用列別名來引用選擇列表中指定的聚合函數。以下查詢將失敗:
SELECT
column_name1,
column_name2,
aggregate_function (column_name3) column_alias
FROM
table_name
GROUP BY
column_name1,
column_name2
HAVING
column_alias > value;
必須明確使用HAVING
子句中的聚合函數運算式,如下所示:
SELECT
column_name1,
column_name2,
aggregate_function (column_name3) alias
FROM
table_name
GROUP BY
column_name1,
column_name2
HAVING
aggregate_function (column_name3) > value;
SQL Server HAVING示例
下麵舉一些例子來理解HAVING
子句的工作原理。
1. HAVING子句與COUNT函數示例
請參閱示例資料庫中的以下orders
表:
以下聲明查找每年至少下過兩個訂單的客戶:
SELECT
customer_id,
YEAR (order_date),
COUNT (order_id) order_count
FROM
sales.orders
GROUP BY
customer_id,
YEAR (order_date)
HAVING
COUNT (order_id) >= 2
ORDER BY
customer_id;
執行上面查詢語句,得到以下結果:
在上面查詢示例中,
- 首先,
GROUP BY
子句按客戶和訂單年份對銷售訂單進行分組。COUNT()
函數返回每個客戶每年下達的訂單數。 - 其次,
HAVING
子句篩選出訂單數至少為2
的所有客戶。
2. HAVING子句與SUM()函數的例子
請考慮以下order_items
表:
以下語句查找淨值大於20000
的銷售訂單:
SELECT
order_id,
SUM (
quantity * list_price * (1 - discount)
) net_value
FROM
sales.order_items
GROUP BY
order_id
HAVING
SUM (
quantity * list_price * (1 - discount)
) > 20000
ORDER BY
net_value;
執行上面查詢語句,得到以下結果:
在這個例子中:
- 首先,
SUM
函數計算銷售訂單的淨值。 - 其次,
HAVING
子句過濾淨值小於或等於20000
的銷售訂單。
3. HAVING子句與MAX和MIN函數的示例
請參閱以下products
表:
以下語句首先查找每個產品類別中的最大和最小價格。 然後,它篩選出最大價格大於4000
或最小價格小於500
的類別:
SELECT
category_id,
MAX (list_price) max_list_price,
MIN (list_price) min_list_price
FROM
production.products
GROUP BY
category_id
HAVING
MAX (list_price) > 4000 OR MIN (list_price) < 500;
執行上面查詢語句,得到以下結果:
4. HAVING子句與AVG()函數示例
以下語句查找平均價格介於500
和1000
之間的產品類別:
SELECT
category_id,
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
category_id
HAVING
AVG (list_price) BETWEEN 500 AND 1000;
執行上面查詢語句,得到以下結果:
上一篇:
SQL Server數據分組
下一篇:
SQL Server子查詢語句