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