在本教程中将学习如何使用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子句返回的行分组。
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。