如何翻译 Postgres 中的 DECODE 表达式?
MAX(DECODE(r.name,'AREA_SEC_TRANVERSAL',r.value,NULL)) AREA
我找到了以下类型,但我不知道“MAX”如何适合这种情况。
CASE search-expression
WHEN expression [, expression [ ... ]] THEN
statements
[ WHEN expression [, expression [ ... ]] THEN
statements
... ]
[ ELSE
statements ]
END CASE;
最佳答案
一个常见的翻译会使用case
一个表达式:
MAX(CASE WHEN r.name = 'AREA_SEC_TRANVERSAL' THEN r.value END) as AREA
事实上,DECODE()
的一般替代品是 CASE
,这是条件逻辑的 SQL 标准——我会推荐 CASE
即使在支持 DECODE()
的数据库中也是如此。
但是,Postgres 支持标准 SQL filter
运算符。我建议改用这个:
MAX(r.value) FILTER (WHERE r.name = 'AREA_SEC_TRANVERSAL') as AREA
我发现这更容易理解(也许现在我已经习惯了)。更重要的是,它为优化器提供了更好的选择来提高性能。
关于sql - 在 Postgres 中翻译 DECODE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58185876/