gpt4 book ai didi

MySQL根据Alias值进行加减

转载 作者:行者123 更新时间:2023-11-29 01:49:39 25 4
gpt4 key购买 nike

我有一个查询根据枚举值 IN/OUT 计算 SUM()(见下文)

enter image description here

我正在尝试扩展计算并添加第二个 SELECT 基于TOTAL INTOTAL OUT 使用此公式输出:

BUDGET + TOTAL IN - TOTAL OUT = TOTAL PROFIT

问题是输出错误(见下文)

enter image description here

应该是 £17,408.90

我要扩展的查询是:

SELECT
f.id_festival AS ID,
CONCAT('£ ', FORMAT(f.festival_budget, 2)) AS Budget,
CONCAT('£ ', ROUND(SUM(CASE WHEN p.pmt_type = 'Payment IN' THEN p.pmt_amount ELSE 0 END), 2)) AS `TOTAL IN`,
CONCAT('£ ', ROUND(SUM(CASE WHEN p.pmt_type = 'Payment OUT' THEN p.pmt_amount ELSE 0 END), 2)) AS `TOTAL OUT`,
(SELECT
CONCAT('£ ', ROUND(SUM(f.festival_budget + 'TOTAL IN') - 'TOTAL OUT', 2))) AS PROFIT
FROM festival f
INNER JOIN payment p
ON p.id_festival = f.id_festival
WHERE f.id_festival = 1
GROUP BY f.id_festival

我不知道那 115.000 是从哪里来的。任何帮助将不胜感激。

最佳答案

'Total In' 是一个字符串。如果在数字表达式中使用它,MySQL 会将其转换为数字。这个数字是 0。字符串 'Total In' 与别名为 Total In 的列没有任何关系。

在 MySQL 中,在表达式中使用表别名基本上有两种选择: (1) 重复表达式。 (2) 使用 CTE。

SELECT f.id_festival AS ID,
CONCAT('£ ', FORMAT(f.festival_budget, 2)) AS Budget,
CONCAT('£ ', ROUND(SUM(CASE WHEN p.pmt_type = 'Payment IN' THEN p.pmt_amount ELSE 0 END), 2)) AS `TOTAL IN`,
CONCAT('£ ', ROUND(SUM(CASE WHEN p.pmt_type = 'Payment OUT' THEN p.pmt_amount ELSE 0 END), 2)) AS `TOTAL OUT`,
CONCAT('£ ',
ROUND(f.festival_budget +
SUM(CASE WHEN p.pmt_type = 'Payment IN' THEN p.pmt_amount
WHEN p.pmt_type = 'Payment OUT' THEN - p.pmt_amount
ELSE 0
END),
2)
) AS PROFIT
FROM festival f INNER JOIN
payment p
ON p.id_festival = f.id_festival
WHERE f.id_festival = 1
GROUP BY f.id_festival;

的确,在某些情况下,您可以在子查询中使用别名来达到相同的效果。但我不建议这样做,因为我还没有找到保证这会起作用的文档。

关于MySQL根据Alias值进行加减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com