MySQL中如何根据其他列的取值拼接对应Value字段值
MySQL 按分组拼接字段值实现方案
核心实现依赖MySQL内置的GROUP_CONCAT()聚合函数,按TagName、DateTime两个字段分组后,将同组内的Value值按指定分隔符拼接即可。
基础实现SQL
将SQL中的替换为你的实际表名改成你自己的业务表名直接执行即可:
SELECT TagName, `DateTime`, GROUP_CONCAT(Value SEPARATOR ',') AS Value FROM 替换为你的实际表名 GROUP BY TagName, `DateTime`;
固定拼接顺序的优化写法
如果需要固定Top=xxx在前、Bot=xxx在后的拼接顺序,可以在GROUP_CONCAT内增加排序规则,避免结果顺序随机:
SELECT TagName, `DateTime`, GROUP_CONCAT(Value ORDER BY `Temp Type` DESC SEPARATOR ',') AS Value FROM 替换为你的实际表名 GROUP BY TagName, `DateTime`;
排序逻辑说明:
_Top_Temp的字典序大于_Bot_Temp,倒序排列时Top对应的Value会排在拼接结果的最前面,和你给出的预期结果格式完全一致。
常见注意事项
- 表中
Temp Type字段名带空格、DateTime属于SQL保留关键字,写SQL时必须用反引号(`)包裹,否则会报语法错误 GROUP_CONCAT默认最大拼接长度为1024字节,如果单组拼接内容过长会被自动截断,执行SQL前可以先运行以下命令调整当前会话的长度上限,避免数据丢失:SET SESSION group_concat_max_len = 102400;- 基于你给出的样例数据执行上述SQL后,会返回2条有效结果:其中
SGTC.0014的两条记录同TagName同DateTime,会拼接为你预期的Top=103.0,Bot=-16.3;SGTC.0013的两条记录DateTime不一致,会分为两行独立返回,符合分组匹配规则。
内容的提问来源于stack exchange,提问作者GQS
相关产品推荐
相关产品推荐

