4

我正在尝试为我的班级查询我的数据库,以找出哪个客户下的订单最多。我正在搜索的表是一个包含 customerID、orderID 和placedDate 的三属性表。

我认为可行的查询是:

select cid from placed order by sum(oid);

但是我一直收到一个错误,说 cid 是“不是单组组函数”,oid 是主键,并且是引用另一个表的外键。这就是问题所在吗?

4

2 回答 2

7

如果你想计算订单数量,你应该计算而不是 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
于 2013-11-11T01:44:21.640 回答
0

如果有一个或多个客户有最大订单:

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.

于 2016-07-17T03:39:34.730 回答