如何高效查询mark1与mark2所有组合对应的Value总和?
更优的组合查询实现方式
当然有,完全不需要写100条SELECT语句,用SQL的GROUP BY子句就能一次性解决这个需求,而且效率高得多。
基础实现(仅查询有数据的组合)
直接通过分组mark1和mark2,配合聚合函数SUM()计算每个组合的value总和:
SELECT mark1, mark2, SUM(value) AS total_value FROM 你的表名 GROUP BY mark1, mark2;
这条语句会自动识别mark1和mark2的所有唯一组合,对每个分组的value求和,一次性返回所有符合条件的结果。
进阶实现(确保显示全部100种组合,含无数据的情况)
如果你的需求是必须列出所有100种组合(包括那些在表中没有对应数据的组合),可以通过交叉连接生成所有可能的组合,再左连接原表计算总和:
SELECT m1.mark1, m2.mark2, COALESCE(SUM(t.value), 0) AS total_value FROM (SELECT DISTINCT mark1 FROM 你的表名) m1 CROSS JOIN (SELECT DISTINCT mark2 FROM 你的表名) m2 LEFT JOIN 你的表名 t ON m1.mark1 = t.mark1 AND m2.mark2 = t.mark2 GROUP BY m1.mark1, m2.mark2;
CROSS JOIN会生成mark1和mark2所有可能的组合;LEFT JOIN确保即使原表中没有该组合的记录,也会保留这个组合行;COALESCE()用来把无数据时的NULL结果转换成0,保证结果的一致性。
内容的提问来源于stack exchange,提问作者gununes132
相关产品推荐
相关产品推荐

