You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL新手求教:两列直接相加与SUM(两列)的区别

嘿,作为SQL新手遇到这个问题太正常了——这俩写法本质上就是「逐行算账」和「总账汇总」的区别,我给你用例子讲明白:

核心区别:行级运算 vs 聚合运算

1. 两列直接相加:逐行计算,每行出一个结果

这种写法是针对表中的每一行,把这一行里的两个列值做加法,然后返回每一行的计算结果。返回的行数和原表完全一致,相当于给每行新增了一个“两列之和”的临时列。

举个实际例子,假设你有个订单表orders

order_id商品价格税费
110010
220020
330030

执行SELECT 商品价格 + 税费 FROM orders;,得到的结果是:

110
220
330

每一行都对应自己的“商品价+税费”,和原表的3行一一对应。

2. SUM()求和:聚合所有行,返回一个(或分组后的)总和

SUM()是SQL的聚合函数,它的作用是把某一列(或者一个计算表达式)的所有行的值加起来,最终返回一个单一的总和值(如果用GROUP BY分组的话,会返回每个分组的总和)。

还是用上面的订单表:

  • 如果执行SELECT SUM(商品价格 + 税费) FROM orders;,得到的结果是660——这是把所有行的“商品价+税费”加起来(110+220+330)的总账。
  • 你也可以写成SELECT SUM(商品价格) + SUM(税费) FROM orders;,结果也是660,因为先把所有商品价求和(100+200+300=600),所有税费求和(10+20+30=60),再把两个总和相加。

如果加上分组,比如按用户分组看每个用户的订单总金额:
SELECT 用户ID, SUM(商品价格 + 税费) FROM orders GROUP BY 用户ID;
这时候会返回每个用户对应的订单总和,而不是全局的一个数,但本质还是聚合每个分组内的所有行。

一句话总结
  • 直接列相加:给每行算小账,行数不变;
  • SUM()求和:把所有小账加起来算总账,行数变成1行(或分组后的行数)。

内容的提问来源于stack exchange,提问作者Colin Landberg

火山引擎 最新活动