SQL行转列,将json数组拆分成多行,一行变多行例子,(LATERAL VIEW explode)

需求背景

有一张工程师能力表,如:

张三 擅长java、c、c++、c#、js

李四 擅长java、go

王五 擅长css、f#

陈六 擅长as、c、java

。。。

需要统计擅长各种语言的工程师的数量,如:

java 3

c 2

go 1

代码示例

使用LATERAL VIEW explode 组合,模拟上述统计案例

sql 复制代码
-- 创建表A
drop table A;
CREATE TABLE A (
  id INT,
  channels STRING,
  partition_time STRING
)
PARTITION BY LIST( partition_time )
(
    PARTITION p_20221130 VALUES IN ( '20221130' ),
    PARTITION default
)
STORED AS ORCFILE COMPRESS;

-- 示例数据插入表A
INSERT INTO A PARTITION (partition_time='20221130') VALUES
  (1, '[101, 102, 103]', '20221130'),
  (2, '[102]', '20221130'),
  (3, '[103]', '20221130'),
  (4, '[101, 102]', '20221130'),
  (5, '[101, 103]', '20221130');

-- 使用LATERAL VIEW explode(channels)统计channels出现的次数
SELECT channel, COUNT(*) AS count
FROM A
LATERAL VIEW explode(split(regexp_replace(channels, '\\[|\\]|\\s', ''), ',')) t AS channel
WHERE partition_time = '20221130'
GROUP BY channel;

输出结果

channel count

101 3

102 3

103 3

相关推荐
数据知道11 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
枷锁—sha11 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
likangbinlxa15 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
野生技术架构师16 小时前
SQL语句性能优化分析及解决方案
android·sql·性能优化
纤纡.17 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
冰暮流星18 小时前
sql语言之分组语句group by
java·数据库·sql
l1t19 小时前
DeepSeek总结的DuckDB使用 WITH RECURSIVE 和 USING KEY 进行聚合的特性
sql·duckdb
l1t19 小时前
DeepSeek总结的PostgreSQL解码GIF文件SQL移植到DuckDB的性能优化方法
sql·postgresql·性能优化
猫头虎19 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database