我正在使用oracle中的数据库HR和OE,我需要进行一个查询,显示:客户的姓名和名字,订单号以及为客户购买的产品列表有超过2个订单。
在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;