mysql - 旋转和汇总 SQL 表的一部分
问题描述
嘿,我是 SQL 新手。我有一个这样的表,我想将它转换/写入另一个表。
|sessionid |key |value|
-----------------------
|12345678 |key1 |val1 |
|12345678 |key1 |val2 |
|12345678 |key1 |val3 |
|12345678 |key1 |val4 |
|12345678 |key1 |val5 |
|12345678 |key2 |lav1 |
|12345678 |key2 |lav2 |
|12345678 |key2 |lav3 |
|12345678 |key2 |lav4 |
|12345678 |key3 |lav1 |
|12345678 |key3 |lav2 |
我想用这种格式写一个新表:
|sessionid |key1 |key2 |
------------------------
|12345678 |val1 |lav1 |
|12345678 |val2 |lav2 |
|12345678 |val3 |lav3 |
|12345678 |val4 |lav4 |
|12345678 |val5 |null |
我所拥有的是:
SELECT sessionid ,
-- KEY1
CASE
WHEN logtagname = 'key1'
THEN value
END AS 'vp_session_id',
-- KEY2
CASE
WHEN logtagname = 'key2'
THEN value
END AS 'diy_module',
FROM table
它返回这个:
|sessionid|key1 |key2 |
-----------------------
|12345678 |val1 |null |
|12345678 |val2 |null |
|12345678 |val3 |null |
|12345678 |val4 |null |
|12345678 |val5 |null |
|12345678 |null |lav1 |
|12345678 |null |lav2 |
|12345678 |null |lav3 |
|12345678 |null |lav4 |
有人可以帮忙吗?
解决方案
SQL 表表示无序集。因此,您可以使用条件聚合(稍加改动)在单独的列中获取值。但是您无法控制排列哪些键值。为此,您需要有一个排序列。
这个想法是:
select sessionid,
max(case when key = 'key1' then value end) key1,
max(case when key = 'key2' then value end) key2
from (select t.*,
row_number() over (partition by sessionid, key order by value) as seqnum
from t
) t
group by sessionid, seqnum;
推荐阅读
- php - 迭代多维数组并检索单个值和数组值
- json - 模板正文包含无效的 JSON:无效字符
- exoplayer - 如何检测在 Exoplayer 中读取 DRM Widevine 许可证时出现错误
- reactjs - 处理 useEffect 和服务器端更改
- visual-studio-code - Visual Studio Code 找不到我的(本地)库文件
- django - 在 EB 上使用 Docker 部署 Django 失败和 502 badgateway
- python - 合并来自多个系列的转换数据帧
- javascript - 将数据(prop)从 _app.js 传递到页面中的 getServerSideProps - NextJS,最新版本
- apache - 如何在 Apache 反向代理后面使用 websocket 和主节点连接 Jenkins 从代理
- python - 为什么我会收到 valueerror?