前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把列表中的ID转换成文字描述

把列表中的ID转换成文字描述

作者头像
数据仓库晨曦
发布2024-01-08 15:35:40
1610
发布2024-01-08 15:35:40
举报
文章被收录于专栏:数据仓库技术

题目内容

有用户标签表如下 user_tag

user_id

tag_id

111

1,2,3

222

1,3,4

333

444

2

有一张标签维表 tag表

tag_id

tag_desc

1

提前点送达

2

恶意刷单

3

非本人跑单

4

私自取消单

请取出如下内容

user_id

tag_desc

111

提前点送达,恶意刷单,非本人跑单

222

提前点送达,非本人跑单,私自取消单

333

444

恶意刷单


查询语句

代码语言:javascript
复制
select
tt.user_id,
concat_ws(',',collect_list(tag.tag_desc)) as tag_desc
from
(
select user_id,new_tag_id
from user_tag
lateral view outer explode(split(tag_id,',')) t as new_tag_id) tt
left join
tag
on tt.new_tag_id = tag.tag_id
group by tt.user_id

查询结果


查询逻辑

step1 列转行,将user_tag表中的tag_id 转换为多行,每行一个tag_id内容,该处需要注意第三行,tag_id为空,lateral view 属于内联接,所以需要使用lateral view outer,属于考察细心程度的点
代码语言:javascript
复制
select user_id,new_tag_id
from user_tag
lateral view outer explode(split(tag_id,',')) t as new_tag_id
step2 关联维表,由tag_id关联出tag_desc
代码语言:javascript
复制
select
    *
from
(
select user_id,new_tag_id
from user_tag
lateral view outer explode(split(tag_id,',')) t as new_tag_id) tt
left join
tag
on tt.new_tag_id = tag.tag_id
Step3 行转列,使用聚合函数将多行tag_desc 拼接为一行,得到结果
代码语言:javascript
复制
select
tt.user_id,
concat_ws(',',collect_list(tag.tag_desc)) as tag_desc
from
(
select user_id,new_tag_id
from user_tag
lateral view outer explode(split(tag_id,',')) t as new_tag_id) tt
left join
tag
on tt.new_tag_id = tag.tag_id
group by tt.user_id

基础数据准备

创建表user_tag

代码语言:javascript
复制
create table user_tag
(
  user_id bigint,
  tag_id string
)

创建表tag

代码语言:javascript
复制
create table tag
(
  tag_id bigint,
  tag_desc string
)

向user_tag中插入数据

代码语言:javascript
复制
insert into user_tag values
(111,'1,2,3'),
(222,'1,3,4'),
(333,null),
(444,'2');

向tag表中插入数据

代码语言:javascript
复制
insert into tag values
(1,'提前点送达'),
(2,'恶意刷单'),
(3,'非本人跑单'),
(4,'私自取消单');
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目内容
  • 查询语句
  • 查询结果
    • 查询逻辑
      • step1 列转行,将user_tag表中的tag_id 转换为多行,每行一个tag_id内容,该处需要注意第三行,tag_id为空,lateral view 属于内联接,所以需要使用lateral view outer,属于考察细心程度的点
      • step2 关联维表,由tag_id关联出tag_desc
      • Step3 行转列,使用聚合函数将多行tag_desc 拼接为一行,得到结果
  • 基础数据准备
    • 创建表user_tag
      • 创建表tag
        • 向user_tag中插入数据
          • 向tag表中插入数据
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档