我有2张桌子:
T1 (id, flag1)
T2 (id, amount, date, flag2, t1_id);
Run Code Online (Sandbox Code Playgroud)
我有以下查询:
SELECT T1.id, ROUND(COALESCE(SUM(T2.amount), 0), 2) AS spent_amount
FROM T1
LEFT JOIN T2 ON T2.t1_id = T1.id
WHERE T2.date <= '2014-01-01' AND T2.flag2 = 't' AND T1.flag1 = 't'
GROUP BY T1.id
Run Code Online (Sandbox Code Playgroud)
问题是我想在结果中有一行,例如:id = 123, spent_amount = 0如果我有一个入口T1,但它没有连接的行T2.
我试图ORDER BY 2个双精度值(别名列)之间的差异,但它没有看到别名列.
例:
SELECT COALESCE(
ROUND(
SUM(amount * currency1.rate / currency2.rate)
, 4)
, 0) AS first_amount,
SUM(
(SELECT
COALESCE(
ROUND(
SUM(table2.amount * currency3.rate / currency2.rate)
, 4)
, 0)
FROM table2
JOIN currencies currency3
ON currency3.id = table2.currency_id
WHERE table2.date BETWEEN table1.start_date AND table1.end_date
)
) AS second_amount
FROM table1
JOIN currencies currency1
ON currency3.id = table1.currency_id
JOIN currencies currency2
ON currency3.id = 123 # some hardcoded ID
ORDER BY first_amount - second_amount ASC
Run Code Online (Sandbox Code Playgroud)
Postgres告诉我,first_amount列不存在.阅读文档,我看到Postgres 9.0不允许带有别名列的表达式.
如何通过以正确的方式对所需的所有东西进行排序来解决问题?