如何在 MySQL 的 WHERE 子句中使用子查询 table 别名

How to use subquery table alias in WHERE clause in MySQL

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",那个时候已经创建了table别名

您不能为先前在子查询中计算的别名计算最大值,或者您可以将查询重写为

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

DEMO