MySQL WHERE by AS Statement



我的表

Table1 :
___________________________________
| ID | UserID | Amount | Date     |
___________________________________
| 1  | 1      | 10     | 2014-12-10
| 2  | 1      | 5      | 2014-12-12
| 3  | 2      | 50     | 2014-12-12
Table2 :
_________________________________________________
| ID | UserID | Amount | Description  | Date     |
_________________________________________________
| 1  | 2      | 50     | Test Payment | 2014-12-10

我希望用户计算余额。我使用这个MySQL代码

SELECT
Distinct(UserID) As User,
(SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) AS Credit,
(SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) AS Received,
((SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) - (SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) As Balance
FROM Table1 WHERE Balance>0

但我不能作为陈述。

您不能访问WHERE中的别名。您应该将完整的表达式放在那里,或者使用HAVING:

SELECT
Distinct(UserID) As User,
(SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) AS Credit,
(SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) AS Received,
((SELECT COALESCE(SUM(Amount),0) FROM Table1 WHERE UserID=User) - (SELECT COALESCE(SUM(Amount),0) FROM Table2 WHERE UserID=User) As Balance
FROM Table1 
HAVING Balance>0

-在大多数情况下,在WHERE中使用全表达式是一件奇怪的事情,因为它会导致计算两次。

SELECT选项卡*来自(选择Distinct(UserID)As User,(从表1中选择COALESCE(SUM(Amount),0),其中UserID=User)作为信用,(SELECT COALESCE(SUM(Amount),0)FROM Table2 WHERE UserID=User)AS Received,(SELECT COALESCE(SUM(Amount),0)FROM Table1 WHERE UserID=User)-(SELECT COELESCE(SUM(Amounty),0(FROM Table2 WHERE UserID=User))作为余额FROM表1)as tabel其中余额>0

最新更新