我的数据库中有一个具有以下结构的表:
trans
- id
- user_id
- k_id
- left
- right
我正在尝试使用
left
获取COALESCE(SUM(left),0) as total1
列中的总值。还要用right
在COALESCE(SUM(right),0) as total2
列中选择总值。对于这一部分,代码正在工作。
之后,我想显示
SUM(total1 - total2) AS total
当我运行此语句时,出现错误:
Unknown column 'total1' in field list
有人知道我可以解决这个问题吗?
这是我的完整声明:
SELECT COALESCE(SUM(left),0) as total1, COALESCE(SUM(right),0) as total2, SUM(total1 - total2) AS total FROM trans WHERE user_id='2' AND k_id='120'
最佳答案
在SQL中,不能在定义它们的SELECT
中重复使用列别名。原因很简单:SQL不保证SELECT
中表达式的求值顺序。
因此,重复以下表达式:
SELECT COALESCE(SUM(left), 0) as total1,
COALESCE(SUM(right), 0) as total2,
(COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0)) as total
FROM trans
WHERE user_id = 2 AND k_id = 120;
请注意,我从
WHERE
中的常量中删除了单引号。编号通常是数字。数字应与数字而非字符串进行比较。如果id确实是字符串,那么单引号当然是正确且正确的。关于mysql - 用总值(value)计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44793033/