如何在Tableau中展开数组字段?含计算字段及自定义SQL方案
如何展开数组列并实现过滤(含空数组处理)
是的,通常需要通过自定义SQL来实现数组展开、空数组填充Null的需求,而且展开后的新列可以直接用于过滤操作。以下是不同主流数据库的具体实现方案,以及通用操作步骤:
按数据库类型的SQL实现
PostgreSQL
使用UNNEST结合LEFT JOIN LATERAL处理空数组,确保空数组行保留并填充Null:
SELECT t.id, u.store_type FROM your_table t LEFT JOIN LATERAL UNNEST(t.store_types) u(store_type) ON true;
- 过滤示例:要筛选出
store_type为asap的行,直接添加WHERE子句:SELECT t.id, u.store_type FROM your_table t LEFT JOIN LATERAL UNNEST(t.store_types) u(store_type) ON true WHERE u.store_type = 'asap';
MySQL 8.0+
如果数组以JSON格式存储,用JSON_TABLE展开,配合LEFT JOIN处理空数组:
SELECT t.id, jt.store_type FROM your_table t LEFT JOIN JSON_TABLE( t.store_types, '$[*]' COLUMNS(store_type VARCHAR(255) PATH '$') ) jt ON true;
- 过滤示例:筛选非空的
store_type:SELECT t.id, jt.store_type FROM your_table t LEFT JOIN JSON_TABLE( t.store_types, '$[*]' COLUMNS(store_type VARCHAR(255) PATH '$') ) jt ON true WHERE jt.store_type IS NOT NULL;
BigQuery
用UNNEST和LEFT JOIN实现展开,空数组自动填充Null:
SELECT t.id, u.store_type FROM your_table t LEFT JOIN UNNEST(t.store_types) u AS store_type ON true;
- 过滤示例:筛选包含
delayed的行:SELECT t.id, u.store_type FROM your_table t LEFT JOIN UNNEST(t.store_types) u AS store_type ON true WHERE u.store_type = 'delayed';
通用操作步骤
- 确认数据库类型:根据你的数据库选择对应的数组展开函数(如PostgreSQL的
UNNEST、MySQL的JSON_TABLE) - 关联展开结果:使用
LEFT JOIN(或PostgreSQL的LEFT JOIN LATERAL)关联展开后的数组,确保原表中数组为空的行被保留,且对应列填充Null - 添加过滤条件:直接在
WHERE子句中对展开后的store_type列设置过滤规则,实现需求
内容的提问来源于stack exchange,提问作者rg4s
相关产品推荐
相关产品推荐

