我有一个列,它是每行都有键值对的映射,我想过滤掉一些我不关心的键,这样得到的映射就是每行的筛选版本.

我所关心的键将在一个数组中,但应该对其进行排序.如何将键数组与IN操作符一起使用,以便可以使用MAP_FILTER函数,或者是否有其他方法可以使用ELEMENT_AT函数来获取每行映射.我在文件中没有找到任何东西.

到目前为止,我有这个SQL查询:

    WITH temp AS (
    SELECT array_sort(filter(map_keys(mapColumn), x -> x not in ('id', 'image')))) as myFiltered 
FROM myTable WHERE myFilter = 'a'
    )     
    SELECT map_filter(mapColumn,(k, v) -> k in temp.myFiltered))) from myTable WHERE myFilter = 'a'

推荐答案

如果我理解正确的话,您需要使用contains数组函数:

select map_filter(m, (k, v) -> contains(array[1], k)) filtered
from (values (map(array[2,1], array['b', 'a']))) as t(m);

输出:

 filtered
----------
 {1=a}

或者,如果您需要过滤掉一些关键点--那么not contains:

select map_filter(m, (k, v) -> not contains(array[1], k)) filtered
from (values (map(array[2,1], array['b', 'a']))) as t(m);

输出:

 filtered
----------
 {2=b}

Sql相关问答推荐

如何通过比较不同表中相同ID S的值来筛选ID为S的列表?

使用Mac日志(log)时间找出SQL中的好小时和坏小时

SQL查询视图与连接?

在甲骨文中查找前一个星期一的S日期

retrofit AWS Athena中的JSON

了解放置时的连接

如何查找所提供日期范围的所有季度开始日期和结束日期

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

从数据库中查找总和大于或等于查询中的数字的数字

用于SQL协助的XQUERY()

不存在记录的国外关键点

YEAR 函数仍然不可SARGable 吗?

如何在 SQL Server 中解决这个复杂的窗口查询?

SQL:考虑合并分支计算分支的增长百分比

一次 Select 语句中按组累计的SQL累计数

如何使用SQL将患者平均分配给他们所在地区的doctor

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

以 15 分钟为间隔的使用情况SQL 查询

查找距上一条记录大于或等于 30 天的记录

Athena:从字符串birth_dt列计算年龄