我正在尝试查询我的数据库以查找我的课程,以找出哪个客户下了最多的订单。我正在搜索的表是一个三属性表,它有customerID,orderID和placedDate。
我认为可行的查询是:
select cid from placed order by sum(oid);
但是我一直收到错误,说cid是“不是单组组函数”,oid是主键,是引用另一个表的外键。问题是什么?
答案 0 :(得分:6)
如果你想计算订单数量,你应该做一个计数而不是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
答案 1 :(得分: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
一起使用。