[英]Oracle - How to use avg(count(*)) on having clause or where clause?
[英]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.