SQL查询优化求助:GROUP_CONCAT需按map分组求和后拼接
解决SQL查询结果不符合需求的问题
你的核心需求是按kode_satker分组后,对相同map对应的value求和,再将map-求和后的值按换行拼接,而原查询只是简单拼接了所有不同的行数据,没有做求和处理。
修改后的查询语句
SELECT satker.kode_satker, GROUP_CONCAT(CONCAT(sub.map, '-', sub.total_value) SEPARATOR '\n') AS newvalue FROM satker LEFT JOIN ( -- 先按kode_satker和map分组,计算每个map对应的总value SELECT kode_satker, map, SUM(value) AS total_value FROM data GROUP BY kode_satker, map ) sub ON satker.kode_satker = sub.kode_satker GROUP BY satker.kode_satker;
逻辑说明
- 子查询处理求和:先通过子查询对
data表按kode_satker和map分组,用SUM(value)计算每个map在对应kode_satker下的总数值,得到每个组合的汇总结果。 - 外层拼接结果:将子查询的结果和
satker表关联,再用GROUP_CONCAT把每个map-总数值的字符串按换行符(\n)拼接起来,最终得到你期望的格式。
这样就能得到符合需求的结果:
kode_satker | newvalue
100 | A-300
B-500
200 | A-200
C-100
内容的提问来源于stack exchange,提问作者user2430933
相关产品推荐
相关产品推荐

