【发布时间】:2020-10-05 09:54:48
【问题描述】:
我这里有这个架构,我需要找到订单总额最高的客户的姓名。我这里有一个 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);
但这非常低效,因为它两次创建同一个表。有没有更有效的取名方式?
【问题讨论】:
-
您的 DBMS 可能会看到有 2 次相同的查询并为您优化它
-
如果可以有超过一个客户的最大总数,那就不行了。
-
如果您使用的是 MySQL 8.0,您可以将重复查询放在 CTE 中。
-
在 MySQL 5.x 中,您可以使用 VIEW。
-
@Barmar View 不保证任何事情,MySQL 将其用作不重复查询的“快捷方式”
标签: mysql sql select sql-order-by greatest-n-per-group