一、需求
表一经过sql语句输出为表二
-- 表一:
─uid─┬─gender─┬─agegroup─┬─favor─┐
│ 1 │ M │ 90后 │ sm │
│ 2 │ M │ 70后 │ sj │
│ 3 │ M │ 90后 │ ms │
│ 4 │ F │ 80后 │ sj │
│ 5 │ F │ 90后 │ ms │
└─────┴────────┴──────────┴───────┘
-- 表二:
┌─tag──────┬─tag_value─┬─uid─────┐
│ agegroup │ 70后 │ [2] │
│ agegroup │ 80后 │ [4] │
│ agegroup │ 90后 │ [1,3,5] │
│ favor │ ms │ [3,5] │
│ favor │ sj │ [2,4] │
│ favor │ sm │ [1] │
│ gender │ F │ [4,5] │
│ gender │ M │ [1,2,3] │
└──────────┴───────────┴─────────┘
二、分析
表一到表二是一眼看不出来的,可以一步一步来,用反推来
1、uid展开(列转行)
列转行:将一列中复杂的array或者map结构拆分成多行
把表二的uid展开如下
| 标签 | 标签值 | 用户 |
|---|---|---|
| 年龄段 | 90后 | 1 |
| 年龄段 | 90后 | 3 |
| 年龄段 | 90后 | 5 |
| 年龄段 | 80后 | 4 |
| 年龄段 | 70后 | 2 |
| 性别 | 男 | 1 |
| 性别 | 男 | 2 |
| 性别 | 男 | 3 |
| 性别 | 女 | 4 |
| 性别 | 女 | 5 |
| 偏好 | 数码 | 1 |
| 偏好 | 美食 | 3 |
| 偏好 | 美食 | 5 |
| 偏好 | 书籍 | 2 |
| 偏好 | 书籍 | 4 |
排序看起来可能更好理解
| 标签 | 标签值 | 用户 |
|---|---|---|
| 年龄段 | 90后 | 1 |
| 性别 | 男 | 1 |
| 偏好 | 数码 | 1 |
| 年龄段 | 70后 | 2 |
| 性别 | 男 | 2 |
| 偏好 | 书籍 | 2 |
| 年龄段 | 90后 | 3 |
| 性别 | 男 | 3 |
| 偏好 | 美食 | 3 |
| 年龄段 | 80后 | 4 |
| 性别 | 女 | 4 |
| 偏好 | 书籍 | 4 |
| 年龄段 | 90后 | 5 |
| 性别 | 女 | 5 |
| 偏好 | 美食 | 5 |
2、聚合
统计每个uid,聚合起来如下
| 用户 | 标签值 |
|---|---|
| 1 | [(年龄段,90后),(性别,男),(偏好,数码)] |
| 2 | [(年龄段,70后),(性别,男),(偏好,书籍)] |
| 3 | [(年龄段,90后),(性别,男),(偏好,美食)] |
| 4 | [(年龄段,80后),(性别,女),(偏好,书籍)] |
| 5 | [(年龄段,90后),(性别,女),(偏好,美食)] |
三、结果步骤
1、查询
查询出数据
select
agegroup,
gender,
favor,
uid
from user_tag_merge
;
┌─agegroup─┬─gender─┬─favor─┬─uid─┐
│ 90后 │ M │ sm │ 1 │
│ 70后 │ M │ sj │ 2 │
│ 90后 │ M │ ms │ 3</

最低0.47元/天 解锁文章
1691

被折叠的 条评论
为什么被折叠?



