sql - 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)
但我想要mastercard
并visa
拥有相同的索引。我试过这样的事情:
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
解决方案
要么创建具有相同结果的第二个案例,要么将您的案例转换为完整的条件。
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
...只是一个简单的值,类似于switch
C 中的语句。
这里有第二种形式。'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
...
推荐阅读
- c++ - 为什么 CFile + CArchive 比 CI/O 流表现更好?
- cmake - 覆盖默认的 CMAKE C++ 编译器标志
- python - 重新安装软件包后修复“AttributeError:模块'requests'没有属性'methods'”错误?
- php - 使用 PHP 的 PayPal Checkout API - 安全地发送和检索附加数据
- html - 如何将 Twitter 时间线包含到 HTML 文件中?
- javascript - 完成所有 $.getJSON 调用(包括内部调用和循环调用)后如何执行代码?
- java - 二进制搜索树中的 NullPointerException 警告
- javascript - 如何在页面退出之前运行 javascript?
- ruby-on-rails - Rails QueryCache 已启用,但无法正常工作
- python-3.x - 如何从 SQL Server 数据库中获取字节并在 Python 中转换为图像