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

相关推荐
北顾笙9802 小时前
MYSQL-day03
数据库·sql·mysql
北风toto5 小时前
本体和智能体协同核心5步骤(生成sql语句)
数据库·sql
德迅云安全-小潘6 小时前
网站遭遇SQL注入攻击?应急处置、漏洞修复与长效防御完整方案
网络·sql·oracle
亦暖筑序9 小时前
Java 8老系统SQL Agent实战:AI生成候选SQL,安全引擎拦截后再执行
java·人工智能·sql
hikktn9 小时前
ORA-01861 日期格式错误的根治方案:从 SQL 层到 Java 层的标准化治理
java·python·sql
jieyucx10 小时前
《Go 数据库编程开篇:彻底打通 database/sql 与 MySQL 驱动的连接池调优密码》
数据库·sql·golang
吴声子夜歌10 小时前
SQL经典实例——概述
数据库·sql
我是大猴子10 小时前
Stream流式编程
数据库·sql
李白的天不白1 天前
查找容器IP
sql
码不停蹄的玄黓1 天前
MySQL慢SQL瓶颈定位
sql·mysql