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

MySQL使用条件GROUP_CONCAT按id、day分组后拆分class对应结果为多列

MySQL 条件GROUP_CONCAT行转列解决方案

原写法问题说明

之前的查询结果所有class列值相同,是因为子查询没有添加对应class的过滤规则,会把当前id+day分组下所有class的results全部拼接,没有按class区分。

正确查询SQL

SELECT 
  id,
  day,
  GROUP_CONCAT(CASE WHEN class = 1 THEN results END SEPARATOR '<br>') AS class1,
  GROUP_CONCAT(CASE WHEN class = 2 THEN results END SEPARATOR '<br>') AS class2,
  GROUP_CONCAT(CASE WHEN class = 3 THEN results END SEPARATOR '<br>') AS class3,
  GROUP_CONCAT(CASE WHEN class = 4 THEN results END SEPARATOR '<br>') AS class4,
  GROUP_CONCAT(CASE WHEN class = 5 THEN results END SEPARATOR '<br>') AS class5,
  GROUP_CONCAT(CASE WHEN class = 6 THEN results END SEPARATOR '<br>') AS class6
FROM Table1
GROUP BY id, day
ORDER BY FIELD(day,'monday','tuesday','wednesday','thursday','friday','saturday','sunday')

实现逻辑说明

  • 核心是条件聚合思路:在GROUP_CONCAT内部通过CASE WHEN过滤对应class的结果,非目标class的行返回NULL,GROUP_CONCAT会自动忽略NULL值,只拼接指定class的results值
  • 不需要嵌套子查询或额外的CONCAT_WS,GROUP_CONCAT自带的SEPARATOR参数可以直接指定<br>作为拼接分隔符
  • 外层保留原有的GROUP BY id, day分组逻辑、按星期排序逻辑即可,和需求的分组规则完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:57:04