sql - 具有相同最大值的多行 - SQL
问题描述
我有两张桌子,Customer
和Orders
。
Customer
:ID,姓名,电子邮件Orders
: Id, OrderDate, 部门, Total, Customer_Id
我构建了一个查询来获取每个部门中总数最高的客户:
select
Id, Name, dep, max(total_s) totals
from
(select
c.Id, c.Name, o.Department dep, sum(o.Total) total_s
from
Customer c
join
Orders o on c.Id = o.CustomerId
group by
1) sub
group by 3
此查询返回每个部门总和最大的客户,问题是我有一个部门有两个客户(行),他们有相同的 Max Total,但查询只返回一行。那么如何返回所有包含 Max 值的行呢?
解决方案
您可以使用rank()
:
select c.Id, c.Name, o.Department, total,
from (select c.Id, c.Name, o.Department, sum(o.Total) as total,
rank() over (partition by o.Department order by sum(o.Total) desc) as seqnum
from Customer c join
Orders o
on c.Id = o.CustomerId
group by c.Id, c.Name, o.Department
) sub
where seqnum = 1;
老实说,我不确定您的查询有什么用处。在几乎任何数据库中,它都会返回错误,因为内部查询和外部查询都有select
不是group by
键的列。此外,查询从不计算单个部门内客户的总数。
推荐阅读
- kubernetes - 将大使部署到 Kubernetes
- json - 使用 Struct 解码 JSON 响应的 Alamofire 错误
- google-cloud-dataproc - Dataproc 集群的数据融合配置失败
- python - 比较行时如何绘制条形图?
- python - 提取字节文本文件中两个字符之间的字符串,Python
- java - Flyway、Spring Boot 和应用程序在没有数据库的情况下启动
- android - 如何在 RecyclerView SelectionTracker 中禁用拖动以进行选择?
- laravel - laravel-image-optimizer 与 spatie/browsershot 冲突
- mysql - 如何在排序的顶部获得 NULL?
- java - 为什么无头 NetLogo 模拟在高端计算机集群上的运行速度比在我的台式机上慢?