我的数据库中有一个具有以下结构的表:

trans
- id
- user_id
- k_id
- left
- right


我正在尝试使用left获取COALESCE(SUM(left),0) as total1列中的总值。还要用rightCOALESCE(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/

10-11 05:07