首页 > 解决方案 > postgres中case表达式中的多个条件

问题描述

我正在尝试按字符串列对行进行排序,如下所示:

select * from cards
order by (case gate 
          when 'mastercard' then 1
          when 'visa' then 2
          when 'fibi' then 3
          when 'uzcard' then 4
          when 'humo' then 5 
          end)

但我想要mastercardvisa拥有相同的索引。我试过这样的事情:

select * from cards
order by (case gate 
          when 'mastercard' or 'visa' then 1
          when 'fibi' then 2
          when 'uzcard' then 3
          when 'humo' then 4
          end)

但我收到此错误:

ERROR: invalid input syntax for type boolean

标签: sqlpostgresql

解决方案


要么创建具有相同结果的第二个案例,要么将您的案例转换为完整的条件。

CASE有两种形式:基本形式是

CASE 
    WHEN condition THEN result
    WHEN condition THEN result
    ...
END

在这种情况下condition是任意布尔表达式,类似于 C 中的 if/else if/else if 序列或快捷方式

CASE expression
    WHEN value THEN result
    WHEN value THEN result
    ...
END

在这种情况下value...只是一个简单的值,类似于switchC 中的语句。

这里有第二种形式。'mastercard' or 'visa'纯粹是胡说八道,它根本不是 SQL,因为它会尝试将其'mastercard'视为visa'布尔值(这将失败,因为两者都不是有效的布尔文字),然后OR它们将检查是否gate等于结果。

您可以添加一个具有相同结果的新案例

case gate 
          when 'mastercard' then 1
          when 'visa' then 1
          when 'fibi' then 2
          when 'uzcard' then 3
          when 'humo' then 4
          end

或将语句扩展为完整的条件:

case
    when gate = 'mastercard' or gate = 'visa' then 1
    when gate = 'fibi' then 2
    ...

推荐阅读