select sum(case when '%sys%' like any(series_arr)
                  or 'displays' = any(lob_arr)
                then revenue else 0 end) as sys_displ_revenue
from mytable

基本上,当我运行这个查询时,术语'%sys%' like any(<array column>)似乎被忽略了,只有'显示'收入被使用.

如何解决这一问题?

推荐答案

  1. 所有PostgreSQL pattern matching操作符都接受字符串作为左操作数,接受模式作为右操作数.您的代码try 执行相反的顺序.
  2. 正如@mandy8055最初建议的那样,您可以对每个元素使用unnest()like.
  3. sum(case)条件聚合构造可以替换为filter clause.

Demo at db<>fiddle:

select sum(revenue)filter(where exists(select from unnest(series_arr)_(e) 
                                       where e like '%sys%')
                          or 'displays' = any(lob_arr)) as sys_displ_revenue
from mytable

Sql相关问答推荐

将SEMI JOIN、ANTI JOIN转换为非连接SQL

查询多个表并返回合并在联合列上的所有表中的所有行

更新在两个或多个面中具有交点的面

使用来自不同深度的嵌套组的值执行计算的干净方法?

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

如何在Presto中将多个列合并到一个数组中

Django将字符串筛选为整数?

不同表达方式时的大小写

用于过滤嵌套对象或数组中的JSON数据的WHERE条件

Redshift PL/pgSQL循环中的参数化列名

优化Postgres搜索未知长度的子串

如何判断小数点后千位是否不为0

对现有记录进行分组

SQL Server 查询 WHERE LIKE

如何用SQL组合客户拥有的产品

获取上个月和上一年的值

将表格和字符串连接以 for each 记录生成订单项目

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行

PostgreSQL 中的递归树查询

在 UTF 编码字符上应用 SQL LIKE 语句没有给出任何结果