我有一个由三个表组成的oracle sql数据库,我想知道,为了检索存储在表customer_info
中总购买次数最多的客户的信息,可以编写的最有效的子查询是什么?(采购数据在表purchase_logs
中)。即一个客户执行的交易次数,而不是购买的商品数量。也就是说,我的目标是检索购买金额最高的客户的详细信息。我有3个表,一个是customer_info
,一个是purchase_logs
,最后一个是item_info
。
My current Approach
SELECT * FROM customer_info
WHERE customer_id = (SELECT cust_id
FROM purchase_logs
GROUP BY cust_id
ORDER BY COUNT(*)
DESC LIMIT 1);
遗憾的是,这似乎没有给我任何结果。
这是我的数据库模式以及purchase_logs的样例数据,customer_info,item_info和期望输出
如果能帮助我了解解决这个问题的正确方法是什么,我将非常感激。
Oracle SQL中没有limit 1
,请使用行限制子句代替(下面示例中的fetch first
):
SELECT *
FROM
(SELECT cust_id, count(*) cnt
FROM purchase_logs
GROUP BY cust_id
ORDER BY cnt desc
fetch first 1 row only with ties
) vc
join customer_info
on customer_id = vc.cust_id;