MySQL合并两行数据:如何获取对应非0Total值的合并结果?
解决MySQL合并行时获取正确Total值的问题
嘿,我看出来问题在哪了——你的查询里Total字段没有用聚合函数处理,GROUP BY之后它默认抓了分组里第一行的0值,而不是你要的非0数值。只需要做个小调整就能搞定:
调整后的查询语句
SELECT SUBSTRING_INDEX(Item, ' - ', 1) as lineItem, GROUP_CONCAT(DISTINCT Descr SEPARATOR '\n\n') as description, MAX(Total) as Total, -- 也可以用 SUM(Total),根据业务需求选 Project FROM table1 WHERE deleted = 0 AND Proj = "Inventory" GROUP BY SUBSTRING_INDEX(Item, ' - ', 1), Project
关键调整说明
聚合Total字段:
- 用
MAX(Total):会在每个分组里取最大的Total值,刚好跳过0,直接拿到你需要的19415和434.14; - 如果你的业务场景里,同一分组可能有多行非0的Total需要累加,就换成
SUM(Total)(0加有效数值的结果和有效数值一致,当前案例中效果相同)。
- 用
兼容MySQL严格模式:
在MySQL 5.7及以上版本,ONLY_FULL_GROUP_BY是默认开启的,要求GROUP BY子句必须包含所有非聚合的SELECT字段,所以这里要加上Project(因为你SELECT里包含了它),否则会触发语法错误。
预期输出
执行调整后的查询后,你会得到想要的结果:
lineItem | description | Total | Project ---------|-------------------|---------|--------- Fuse | abc\n\ndef | 19415 | Inventory Jumper | ghi\n\njkl | 434.14 | Inventory
内容的提问来源于stack exchange,提问作者whalien52
相关产品推荐
相关产品推荐

