mysql - 如何在 MySQL 查询中找到最大总和的关联名称?
问题描述
我这里有这个架构,我需要找到订单总额最高的客户的姓名。我在这里有一个 SQL 查询:
SELECT Name
FROM (SELECT Name, SUM(Amount) AS Total
FROM customer JOIN orders ON cust_id = ID
GROUP BY Name) AS Totals
WHERE Total = (SELECT MAX(Total)
FROM (SELECT Name, SUM(Amount) AS Total
FROM customer JOIN orders ON cust_id = ID
GROUP BY Name) AS X);
但这非常低效,因为它两次创建同一个表。有没有更有效的方法来获取名称?
解决方案
如果您想要总安装量最大的客户,那么您可以加入、订购和限制:
select c.name
from customer c
inner join orders o on o.cust_id = c.id
group by c.id, c.name
order by sum(o.amount) desc
limit 1
请注意,这不处理可能的顶部关系。为此,您需要更多代码。您通常会使用having
子句进行过滤,而不是排序:
select c.name
from customer c
inner join orders o on o.cust_id = c.id
group by c.id, c.name
having sum(o.amount) = (
select sum(o1.amount)
from orders o1
group by cust_id
order by sum(o1.amount) desc
limit 1
)
最后:如果您正在运行 MySQL 8.0,则使用窗口函数更简单rank()
:
select name
from (
select c.name, rank() over(order by sum(o.amount) desc) rn
from customer c
inner join orders o on o.cust_id = c.id
group by c.id, c.name
) t
where rn = 1
推荐阅读
- r - 使用 {{foo}} 将变量名列表传递给函数
- jquery - 如何使用 Datepicker 更新日期?
- php - 如何将日期字符串(j FY)更改为日期(Ymd)
- java - Kubernetes 中 Pod 之间基于 Cookie 的会话持久性
- mysql - 正确连接 2 个具有多个结果的表
- python-3.x - Scrapy JSON 输出 - 值为空 - 尝试 xpath
- amazon-web-services - CloudFormation:以 HostedZone 身份访问 PrivateDnsNamespace
- python - Xpath 无法在网页中找到日历元素
- r - 了解 gstat 的变异函数
- html - 更改滑块中文本的持续时间