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

相关推荐
Knight_AL3 小时前
Spring 事务传播行为 + 事务失效原因 + 传播行为为什么不用其他模式
数据库·sql·spring
lifejump12 小时前
Pikachu | SQL-inject
数据库·sql
lkbhua莱克瓦2414 小时前
进阶-SQL优化
java·数据库·sql·mysql·oracle
石小千14 小时前
Myql binlog反向解析成sql
数据库·sql
摩西蒙15 小时前
阿里云 MaxCompute(原 ODPS)定时任务查询库存快照场景
java·大数据·sql·database
鲨莎分不晴16 小时前
给 Hadoop 插上 SQL 的翅膀:Apache Hive 架构与实战全解
hadoop·sql·apache
猫头虎1 天前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
wb043072011 天前
SQL工坊不只是一个ORM框架
数据库·sql
一个天蝎座 白勺 程序猿2 天前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees
尋有緣2 天前
力扣1435-制作会话柱状图
大数据·数据库·sql·leetcode·oracle