哪个客户下了大部分订单。 SQL查询

时间:2013-11-11 01:39:25

标签: sql oracle

我正在尝试查询我的数据库以查找我的课程,以找出哪个客户下了最多的订单。我正在搜索的表是一个三属性表,它有customerID,orderID和placedDate。

我认为可行的查询是:

select cid from placed order by sum(oid);

但是我一直收到错误,说cid是“不是单组组函数”,oid是主键,是引用另一个表的外键。问题是什么?

2 个答案:

答案 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一起使用。