Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle Having子句
Oracle Having子句
作者:--    发布时间:2019-11-20

在本教程中将学习如何使用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子句过滤行。这是havingwhere子句之间的主要区别。

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的订单,并且每个订单中的产品数量在1012之间:

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子句返回的行分组。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册