我在pgadmin查询工具上收到一条错误消息,说不存在deelnemers(这是荷兰数据库)。但是据我了解的sql查询,SELECT应该在ORDER BY之前执行。
我已经尝试过更改CASE WHEN语句的顺序,但是我一直收到此错误。
SELECT r.reisnr , COUNT (k.naam) AS deelnemers
FROM ruimtereizen.reizen r
INNER JOIN ruimtereizen.deelnames d
USING (reisnr)
INNER JOIN ruimtereizen.klanten k
USING (klantnr)
GROUP BY r.reisnr
ORDER BY CASE WHEN COUNT (DISTINCT deelnemers) > 1 THEN deelnemers
WHEN COUNT (DISTINCT deelnemers) = 1 THEN r.reisnr
ELSE deelnemers
END
错误是deelnemers不存在。
答案 0 :(得分:1)
作为一般性回答,我会说您的“通用SQL”是好的。但是...每个数据库都支持某些功能,而不能支持其他功能。
无论如何,为了安全起见,我会在CTE中预先计算您的COUNT()
函数,以便可以在外部查询中自由使用它。例如:
with
x as (
SELECT
r.reisnr,
COUNT (k.naam) AS deelnemers,
COUNT (DISTINCT deelnemers) as dd
FROM ruimtereizen.reizen r
INNER JOIN ruimtereizen.deelnames d
USING (reisnr)
INNER JOIN ruimtereizen.klanten k
USING (klantnr)
GROUP BY r.reisnr
)
select *
from x
ORDER BY CASE WHEN dd > 1 THEN deelnemers
WHEN dd = 1 THEN reisnr
ELSE deelnemers
END
答案 1 :(得分:0)
将CASE
与ORDER BY
一起使用很简单。该表达式只需要有效即可。
我只能想象你想做什么。如果要先按deelnemers
然后按名称订购,则不需要CASE
:
order by deelnemeers desc, reisnr