簡體   English   中英

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

[英]How to can I use COUNT in a WHERE clause in Oracle

我正在使用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;

這是數據庫 在此處輸入圖片說明

使用子查詢,因為對於組過濾器,必須使用查詢中使用的子查詢,但是如果要在該位置使用數字過濾器,則可以使用子查詢或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

您可以使用匯總將信息匯總到一起:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM