SELECT invoice_id, sum_amount
FROM (SELECT invoice_id, SUM(amount) AS sum_amount
FROM invoice
GROUP BY invoice_id) AS TEMP_TABLE
WHERE sum_amount in (SELECT MAX(sum_amount)
FROM TEMP_TABLE);
当我尝试使用 TEMP_TABLE 时,出现错误并提示 TEMP_TABLE 不存在。为什么它不起作用?我认为执行顺序是“FROM”然后“WHERE”,此时表别名已经创建。
最佳答案
您不能为先前在子查询中计算的别名计算最大值,或者您可以将查询重写为
SELECT a.invoice_id, SUM(a.amount) AS sum_amount,
c.max_amount
FROM invoice AS a
CROSS JOIN (
SELECT MAX(sum_amount) max_amount FROM(
SELECT invoice_id, SUM(amount) AS sum_amount
FROM invoice
GROUP BY invoice_id
) b
) c
GROUP BY a.invoice_id
HAVING sum_amount = c.max_amount
我已经创建了一个示例演示用于测试目的
示例数据
INSERT INTO invoice
(`invoice_id`, `amount`)
VALUES
(1, 10),
(2, 5),
(2, 5),
(3, 1),
(4, 2);
在上面的查询中,您可以看到发票金额的最大总和为 10,因此应返回 invoice_id =>1,2 1 的金额为 10,invoice_id => 2 (5+5 = 10) 的两个条目也是 10 ,3 和 4 不应包含在结果集示例输出中
invoice_id sum_amount max_amount
1 10 10
2 10 10
关于mysql - 如何在 MySQL 的 WHERE 子句中使用子查询表别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018373/