在本教程中将学习如何使用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
子句返回的行分组。