我正在尝试为我的班级查询我的数据库,以找出哪个客户下的订单最多。我正在搜索的表是一个包含 customerID、orderID 和placedDate 的三属性表。
我认为可行的查询是:
select cid from placed order by sum(oid);
但是我一直收到一个错误,说 cid 是“不是单组组函数”,oid 是主键,并且是引用另一个表的外键。这就是问题所在吗?
如果你想计算订单数量,你应该计算而不是 SUM:
SELECT cid,COUNT(*)
FROM placed
GROUP BY cid
ORDER BY COUNT(*) DESC
这将为您提供客户列表及其各自的订单数量,按订单数量排序。
如果您只想要订单最多的客户,则必须将记录数限制为第一个。为此,您必须告诉您使用的是什么 DBMS,因为它与 DBMS 不同,您将查询限制为第一个(例如:mysql 是 LIMIT 1,sql-server 是 TOP 1):
在 Oracle 中,您可以执行以下操作:
SELECT * FROM (
SELECT cid,COUNT(*)
FROM placed
GROUP BY cid
ORDER BY COUNT(*) DESC
) a
WHERE rownum = 1
如果有一个或多个客户有最大订单:
select * from orders o, customer c where o.cusId = c.cusId and o.cusId IN (select cusId from orders group by cusId having count(*) = (select count(*) from orders or group by or.cusId order by count(*) desc limit 1));
这个解决方案适用于 MySQL,因为我使用过LIMIT
. 它可以根据 DBMS 进行更改。
我也在=
第二个查询中使用过,因为LIMIT
它不适用于IN
.