You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MySQL实现行转列,将类型对应的路径拆分为多列?

问题描述

完成关联操作与条件过滤后,得到如下数据表:

名称(Name)类型(Type)路径(Path)
Item 1mobile/mobile/image1.jpg
Item 1desktop/desktop/image1.jpg
Item 2mobile/mobile/image2.jpg
Item 2desktop/desktop/image2.jpg

期望最终得到如下结构的结果表:

名称(Name)移动端路径(Path mobile)桌面端路径(Path desktop)
Item 1/mobile/image1.jpg/desktop/image1.jpg
Item 2/mobile/image2.jpg/desktop/image2.jpg

请问可以使用MySQL的什么特性实现该数据转换?目前只能在调用请求的代码中进行数据映射处理。


解决方案

可以使用MySQL的条件聚合(结合CASE WHEN语句与聚合函数)实现这种行转列的数据转换,无需在代码层处理数据映射。

具体SQL实现

SELECT
    `名称(Name)`,
    MAX(CASE WHEN `类型(Type)` = 'mobile' THEN `路径(Path)` END) AS `移动端路径(Path mobile)`,
    MAX(CASE WHEN `类型(Type)` = 'desktop' THEN `路径(Path)` END) AS `桌面端路径(Path desktop)`
FROM
    你的目标数据表名
GROUP BY
    `名称(Name)`;

逻辑说明

  1. CASE WHEN语句会根据类型(Type)的取值,筛选出对应端的路径值,不匹配的行返回NULL
  2. 通过GROUP BY 名称(Name)将同一名称的多行数据分组
  3. 使用MAX()聚合函数(也可使用MIN(),因为每个名称对应唯一的移动端/桌面端路径),自动忽略分组内的NULL值,最终将分组内的多行数据合并为一行,得到对应端的路径

如果使用MySQL 8.0及以上版本,也可以借助JSON相关函数实现,但条件聚合是兼容性更强的通用方案,适配所有主流MySQL版本。


内容的提问来源于stack exchange,提问作者Ilya Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:01:24