sql - 在 SQL 中查找具有最高值的行
问题描述
根据架构,该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;
解决这个问题可能是有史以来最简单的事情,但我现在不能。所以,我想要一些帮助。
解决方案
使用窗口函数选择每个客户的最大总数:
SELECT RetailerId, ProductId, ProductTotal
FROM
(
SELECT
RetailerId, ProductId, SUM(Count) AS ProductTotal,
MAX(SUM(Count)) OVER (PARTITION BY RetailerId) AS MaxProductTotal
FROM Orders
GROUP BY RetailerId, ProductId
)
WHERE ProductTotal = MaxProductTotal
ORDER BY RetailerId;
推荐阅读
- ionic-framework - 在 wifi adb 上运行 ionic live reload 时出错
- linux - tar.gz 的 Linux 拆分在加入时运行良好,但在 S3 存储桶的帮助下转移到远程机器时
- windows - NginX for Windows 是否支持 IPv6?
- javascript - 如何解决将 javaScript 添加到 wso2 中的错误?
- go - Redigo 获取速度非常慢(40 毫秒)
- typescript - Flutter firebase 云函数打字稿
- javascript - 使文本与 CSS 中基于 div 的 HTML 页面中的 DIV 对齐?
- python - 捕获 json 值并将这些值分配给 python 列表时出现问题
- android - Android Retrofit 将变量动态设置为 Route
- apache-kafka - 为什么我们在使用 Apache Kafka 时需要数据库?