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

相关推荐
骑着蜗牛撵大象3271 天前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
zhengfei6111 天前
Go-fastdfs /reload 未授权访问: 有效PoC
数据库·sql
大维1 天前
DBX 实测:从 SQLite 查询到 MiniMax-M3 自然语言生成 SQL
数据库·sql·sqlite
景煜拾年1 天前
InnoAI SQL 助手
运维·数据库·笔记·sql
Decay__2 天前
22_MySQL 运维自动化平台 —— 部署编排 + 监控 + 巡检 + 告警 + 工单闭环一体化
运维·数据库·sql·mysql·架构
Decay__2 天前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
挖掘狂人2 天前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
后端·sql·mysql
codigger2 天前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
Francek Chen2 天前
【大数据处理与分析】数据仓库Hive:09 Hive 编程实践
大数据·数据仓库·hive·hadoop·sql
麦壳饼2 天前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb