关于MySQL SUM()函数输出结果的理解困惑
关系代数Gamma运算与SQL分组求和的逻辑解析
首先明确:关系代数中的Gamma (A, sum(B))(R)等价于SQL中GROUP BY A后对B列求和的操作,核心是按A的取值分组,对每组内的B值单独求和,而非全局求和。
表R的原始数据
R(A, B): {(0,1), (2,3), (0,1), (2,2), (3, 2)}
分组求和的具体计算过程
GROUP BY A会将A值相同的行归为同一组,再对每组的B列执行SUM():
- A=0的分组:包含2行数据
(0,1)、(0,1),B值总和为1 + 1 = 2,对应结果行(0, 2) - A=2的分组:包含2行数据
(2,3)、(2,2),B值总和为3 + 2 = 5,对应结果行(2, 5) - A=3的分组:包含1行数据
(3,2),B值总和为2,对应结果行(3, 2)
全局求和与分组求和的关联
你执行select sum(B) from R得到总和9,是所有B值的累加:1+3+1+2+2=9。而分组求和的结果相加2+5+2=9,和全局总和一致,这也验证了分组求和的正确性——只是把全局的总和按A的取值拆分成了各组的和。
内容的提问来源于stack exchange,提问作者Castlyvania
相关产品推荐
相关产品推荐

