【发布时间】:2019-04-11 14:21:47
【问题描述】:
根据架构,Orders 表有以下列:
OrderId integer, CustomerId integer, RetailerId integer, ProductId integer, Count integer
我试图找出每个零售商的订单数量最多的产品。
所以,总结每个产品的所有订单,我有以下查询:
SELECT RetailerId, ProductId, SUM(Count) AS ProductTotal
FROM Orders
GROUP BY RetailerId, ProductId
ORDER BY RetailerId, ProductTotal DESC;
这给出了这样的输出:
RETAILERID PRODUCTID PRODUCTTOTAL
---------- ---------- ------------
1 5 115
1 10 45
1 1 15
1 4 2
1 8 1
2 9 12
2 11 10
2 7 1
3 3 3
4 2 1
5 11 1
现在,我要做的就是找到每个零售商的订单数量最多的产品。现在,它显示了所有产品;我只想要一个。
我尝试了太多东西。下面是一个特别可恶的例子:
SELECT O.RetailerId, O.ProductId, O.ProductTotal
FROM (
SELECT Orders.ProductId, MAX(ProductTotal) AS MaxProductTotal
FROM (
SELECT Orders.ProductId AS PID, SUM(Orders.Count) AS ProductTotal
FROM Orders
GROUP BY Orders.ProductId
) AS O INNER JOIN Orders ON Orders.ProductId = PID
GROUP BY Orders.ProductId
) AS X INNER JOIN O ON O.RetailerId = X.RetailerId AND O.ProductTotal = X.MaxProductTotal;
解决这个问题可能是有史以来最简单的事情,但我现在不能。所以,我需要一些帮助。
【问题讨论】:
标签: sql oracle greatest-n-per-group