MySQL 5.6下按id分组将key-value多行数据转列合并为单行的查询方法
MySQL 5.6 键值表行转列实现方案
你需要的是典型的固定key数量的行转列操作,MySQL 5.6 环境下可以直接用聚合函数配合条件判断实现,以下是可直接运行的查询代码:
SELECT id, MAX(CASE WHEN `key` = 'name' THEN `value` END) AS name, MAX(CASE WHEN `key` = 'country' THEN `value` END) AS country FROM sample GROUP BY id;
逻辑说明
- 用
GROUP BY id将相同id的行聚合为一组 - 每个
CASE WHEN语句仅匹配对应key的value值,不匹配的行返回NULL - 用
MAX()聚合函数提取每组中非NULL的value值,即可得到每个id对应的各个key的取值
也可以用左连接的方式实现,效果完全一致:
SELECT t1.id, t1.`value` AS name, t2.`value` AS country FROM (SELECT id,`value` FROM sample WHERE `key`='name') t1 LEFT JOIN (SELECT id,`value` FROM sample WHERE `key`='country') t2 ON t1.id = t2.id;
内容的提问来源于stack exchange,提问作者hsnsd
相关产品推荐
相关产品推荐

