显示别名列中的最小值、最大值和平均值

3

我的 MySQL 知识 = 初学者

Columns: MonthlyIncome and MonthlyDebt
Table: customer

期望输出:呈现月收入 - 月债务之差的最小值、最大值和平均值。MonthlyIncome - MonthlyDebt = NetIncome

我的失败尝试 来自研究和实验:

  1. 获取两列之间的差异,并将它们放在一个别名列中。
  2. 从别名列(NetIncome)中选择以显示最小值、最大值和平均值。

失败的查询:

SELECT MonthlyIncome - MonthlyDebt AS NetIncome
FROM    (
        SELECT MIN(NetIncome) AS MinNet,
        MAX(NetIncome) AS MaxNet,
        AVE(NetIncome) AS AveNet
        FROM customers
        ) AS subqueryalias

失败会产生以下错误(ERROR):

Error Code: 1054. Unknown column 'NetIncome' in 'field list'
2个回答

2
你在外部查询中定义了 NetIncome,但在内部查询中引用它是不可行的。内部查询先执行。我甚至不会使用别名,在所有聚合函数中使用表达式即可:
select min(MonthlyIncome - MonthlyDebt), max(MonthlyIncome - MonthlyDebt), avg(MonthlyIncome - MonthlyDebt)
from customers

谢谢@Shadow。我从没想过为每个函数进行计算会奏效。 - nakakapagpabagabag

1
你需要把我们的SELECT倒过来,就像这样。
SELECT 
  MIN(NetIncome) AS MinNet,
  MAX(NetIncome) AS MaxNet,
  AVE(NetIncome) AS AveNet
FROM ( SELECT MonthlyIncome - MonthlyDebt AS NetIncome 
       FROM customers ) AS subqueryalias

内部子查询 SELECT MonthlyIncome - MonthlyDebt AS NetIncome FROM customers 先被评估并生成列 NetIncome,以便在外部(主)select 中进一步使用。


嗨,@cars10,谢谢您的回复。由于访问限制,我无法验证解决方案执行命令被拒绝。不过,我仍然感谢您的建议。 - nakakapagpabagabag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接