sql - 在 Postgres 中翻译 DECODE

标签 sql postgresql case

如何翻译 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/

相关文章:

mysql - 如何配置 processmaker(3.0.7) 以使用 postgresql (9.3)?

postgresql - 更改列集非空失败

javascript switch语句不起作用

php - 获取多行的年份部分

sql - View 对聚合函数的性能影响与结果集限制

sql - 存储 "Worked Hours"的正确数据类型是什么

javascript - Sequelize BeingsToMany 通过查询目标模型来获取源模型

postgresql - 从此 SELECT CASE STATEMENT 获取 NULL

sql - 在 SQL SERVER 的 UPDATE 语句中使用 CASE 选择 SET 的列

字符串的 SQL 数据类型