SQL CASE分支为何设1而非2?设置2后的结果及计算逻辑咨询
CASE分支数值选择的问题解析
为什么用1而不是2或3?
这里用1是为了统计符合条件的记录条数——每匹配到一条对应rating的影片记录,CASE就返回1,SUM函数把这些1加起来,得到的就是该rating的影片总数。用1是最直观的计数逻辑,因为1代表“1条记录”,刚好对应计数需求。
设置2后的结果与计算逻辑
如果把THEN后面的1改成2,计算逻辑就变成:每匹配到一条对应rating的记录,就给SUM贡献2,而不是1。
按照你给出的正确结果计算:
- r的结果会是
195 × 2 = 390 - pg的结果会是
194 × 2 = 388 - pg13的结果会是
223 × 2 = 446
你尝试时得到300左右的数值,大概率是只修改了其中某一个分支的数值,或者测试时的数据有临时差异,但核心逻辑不变:SUM的结果等于「该rating的影片总数 × 你设置的数值」。
额外说明
本质上,SUM是对CASE返回的数值做累加:
- 用1时,SUM的结果就是符合条件的记录数量(每个符合条件的记录贡献1)
- 用任何非0数字n,SUM结果都是「记录数 × n」
- 如果只是单纯计数,1是最合理的选择,用其他数字会改变结果的含义,不再是单纯的条数统计。
原SQL代码
SELECT SUM(CASE rating WHEN 'R' THEN 1 ELSE 0 END) AS r, SUM(CASE rating WHEN 'PG' THEN 1 ELSE 0 END) AS pg, SUM(CASE rating WHEN 'PG-13' THEN 1 ELSE 0 END) AS pg13 FROM film;
内容的提问来源于stack exchange,提问作者Finddd out
相关产品推荐
相关产品推荐

