我正在尝试查询我的数据库以查找我的课程,以找出哪个客户下了最多的订单.我正在搜索的表是一个三属性表,它有customerID,orderID和placedDate.
我认为可行的查询是:
select cid from placed order by sum(oid);
Run Code Online (Sandbox Code Playgroud)
但我一直收到一个错误,说cid是"不是单组组函数",oid是主键,是引用另一个表的外键.问题是什么?
如果你想计算订单数量,你应该进行计数而不是SUM:
SELECT cid,COUNT(*)
FROM placed
GROUP BY cid
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
这将为您提供客户列表及其各自的订单数量,按订单数量排序.
如果您只想要拥有大多数订单的客户,则必须将记录数限制为第一个.为此,您必须告诉您使用哪个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
Run Code Online (Sandbox Code Playgroud)