我正在尝试使用以下查询计算MySQL中的帐户余额
SELECT accountNumber,
(
SELECT amount
FROM accountDebits
WHERE accountNumber = accounts.accountNumber
) debits,
(
SELECT amount
FROM accountCredits
WHERE accountNumber = accounts.accountNumber
) credits,
credits - debits as balance
FROM accounts
但是我收到了这个错误:
错误代码:1054。未知列'信用'在'字段列表'
如何在select?
中引用子查询别名答案 0 :(得分:0)
用另一个执行计算的子查询包装它:
SELECT accountNumber, debits, credits, credits - debits as balance
FROM (
SELECT accountNumber,
(
SELECT amount
FROM accountDebits
WHERE accountNumber = accounts.accountNumber
) debits,
(
SELECT amount
FROM accountCredits
WHERE accountNumber = accounts.accountNumber
) credits
FROM accounts
) x
虽然这会启动并运行您的查询,但您最好使用外部联接:
SELECT accountNumber, debits, credits, credits - debits as balance
FROM (
SELECT
a.accountNumber,
coalesce(sum(d.amount), 0) debits,
coalesce(sum(c.amount), 0) credits,
FROM accounts a
LEFT JOIN accountDebits d
ON d.accountNumber = a.accountNumber
LEFT JOIN accountCredits c
ON c.accountNumber = a.accountNumber
) x
答案 1 :(得分:0)
使用table.field约定,应该可以工作
SELECT accountNumber,
(
SELECT amount
FROM accountDebits
WHERE accountNumber = accounts.accountNumber
) debits,
(
SELECT amount
FROM accountCredits
WHERE accountNumber = accounts.accountNumber
) credits,
credits.amount - debits.amount as balance
FROM accounts
答案 2 :(得分:0)
我想你想这样做:
SELECT a.*,
(COALESCE(credits, 0) - COALESCE(debits, 0)) as balance
FROM (SELECT accountNumber,
(SELECT SUM(ad.amount)
FROM accountDebits ad
WHERE ad.accountNumber = a.accountNumber
) as debits,
(SELECT SUM(ac.amount)
FROM accountCredits ac
WHERE ac.accountNumber = a.accountNumber
) credits
FROM accounts a
) a;
您需要子查询,因为您无法在定义它们的同一SELECT
中引用派生列。您需要聚合函数将所有借方/贷方合并为每个帐户的单个值。