如何在Oracle的WHERE子句中使用COUNT

时间:2019-02-21 17:40:48

标签: sql oracle group-by having

我正在使用oracle中的数据库HR和OE,我需要做一个查询来显示:客户的名字和姓氏,订单号和购买的产品清单对于拥有两个以上订单的客户。

在OE中,所有我正在使用的表

这是我的查询

SELECT cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name FROM
    customers cc INNER JOIN orders oo ON cc.customer_id = oo.customer_id INNER JOIN
    order_items oi ON oo.order_id = oi.order_id INNER JOIN product_information pi ON
    oi.product_id = pi.product_id
    GROUP BY cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name
    HAVING COUNT(oo.order_id) > 2;

这是数据库 enter image description here

2 个答案:

答案 0 :(得分:0)

使用子查询,因为对于组过滤器,必须使用在查询中使用的子查询,但是如果要在该位置使用数字过滤器,则可以使用子查询或cte

    select * from
     (
     SELECT cc.cust_first_name, cc.cust_last_name, oo.order_id, 
    pi.product_name,COUNT(oo.order_id) as cnt
    FROM
    customers cc INNER JOIN orders oo ON cc.customer_id = oo.customer_id INNER JOIN
    order_items oi ON oo.order_id = oi.order_id INNER JOIN product_information pi ON
    oi.product_id = pi.product_id
    GROUP BY cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name
    ) a where a.cnt>2

答案 1 :(得分:0)

您可以使用汇总功能将信息汇总到一起:

SELECT cc.cust_first_name, cc.cust_last_name,
       COUNT(DISTINCT oo.order_id) as num_orders,
       LISTAGG(pi.product_name) as products
FROM customers cc INNER JOIN
     orders oo
     ON cc.customer_id = oo.customer_id INNER JOIN
     order_items oi
     ON oo.order_id = oi.order_id INNER JOIN
     product_information pi
     ON oi.product_id = pi.product_id
GROUP BY cc.cust_first_name, cc.cust_last_name
HAVING COUNT(DISTINCT oo.order_id) > 2;