mysql - 如何在 MySQL 的 WHERE 子句中使用子查询表别名

标签 mysql subquery

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

DEMO

关于mysql - 如何在 MySQL 的 WHERE 子句中使用子查询表别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018373/

相关文章:

mysql - 如何在mysql查询中的另一个选择(子查询)中使用选择?

mysql - Laravel 具有慢速 subSelect 查询(MySQL)

php - 如何检测数据库结构是否发生变化? (不是内容!)

php - MYSQL中获取表中某列为空的值

找不到 mysqldump (Wordmove)。如何在 Zsh 中正确设置符号链接(symbolic link)?

MySQL 连接来自另一个表的计数匹配记录,但我也需要零值

mysql - 如何在需要来自 super 查询的数据的 where 子句中使用带有 where 子句的 mysql 子查询

带有子查询的 MySQL 查询花费的时间比应该的长

mysql - 按列分组返回具有相同值的两行