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

MySQL行转列时varchar字段无法使用SUM函数的解决问题

MySQL 字符类型字段行转列解决方案

问题原因

当前语句返回结果异常的核心原因是:对user_id分组后,未给meta_value对应的判断列添加聚合函数,MySQL默认只会返回分组后第一条记录的匹配值,因此仅第一个出现的nickname字段有返回值,其余字段均为NULL。
针对meta_value为varchar类型无法使用SUM聚合的场景,可使用MAX()/MIN()函数替代,因为同一个用户ID下同一个meta_key仅对应唯一一条记录,MAX()/MIN()会直接返回该唯一字符串值,不会产生逻辑错误。

正确实现代码

SELECT 
  user_id,
  MAX(CASE WHEN meta_key = 'nickname' THEN meta_value ELSE NULL END) AS nickname,
  MAX(CASE WHEN meta_key = 'first_name' THEN meta_value ELSE NULL END) AS first_name,
  MAX(CASE WHEN meta_key = 'last_name' THEN meta_value ELSE NULL END) AS last_name,
  MAX(CASE WHEN meta_key = 'description' THEN meta_value ELSE NULL END) AS description
FROM user_table
GROUP BY user_id;

扩展说明

如果业务场景中存在同一个user_id同一个meta_key对应多条meta_value的情况,可以根据需求调整聚合逻辑:

  • 需拼接所有值:使用GROUP_CONCAT(CASE WHEN meta_key = 'xxx' THEN meta_value END SEPARATOR ',')
  • 需取最新的值:可先按umeta_id倒序排序后再分组,或者关联子查询取最大umeta_id对应的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:27:05