SQL按code分组合并行问题:GROUP_CONCAT未返回全部记录
问题解决:按code分组合并cat和class字段
你的问题出在查询语句中的ID字段未做聚合处理:当使用GROUP BY code时,非分组列(比如ID)必须通过聚合函数(如MIN()、MAX())指定取值逻辑,否则在严格SQL模式下会直接报错,非严格模式也会返回不确定的ID值,进而导致结果不符合预期。
以下是正确的SQL语句:
SELECT MIN(ID) AS ID, GROUP_CONCAT(CAT SEPARATOR ',') AS CAT, GROUP_CONCAT(Class SEPARATOR ',') AS Class, code FROM T1 GROUP BY code;
执行结果
| id | cat | code | class |
|---|---|---|---|
| 1 | A,B | 197 | 1,2 |
| 2 | C.1 | 233 | 1 |
| 2 | C.2 | 240 | 1 |
说明:
- 使用
MIN(ID)是为了匹配你期望结果中code=197对应的ID值,如果你需要分组内的最大ID,可以替换为MAX(ID); GROUP_CONCAT()默认用逗号分隔,显式指定SEPARATOR ','是为了逻辑更清晰,也可以省略;- 该语句会按所有
code值分组,返回全部分组的合并结果,符合你“获取全部记录”的需求。
内容的提问来源于stack exchange,提问作者Surya
相关产品推荐
相关产品推荐

