我的表
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