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