为何SELECT Holiday_Flag=1与WHERE Holiday_Flag=1返回结果不同?
问题原因解析
你完全误解了SELECT Holiday_Flag = 1的作用——它根本不是筛选,而是新增一个名为Holiday_Flag的计算列,强制让这个列的所有行值都是1,和原表中的Holiday_Flag字段没有任何筛选关联。
两者的核心逻辑差异:
- 带
WHERE的SQL:先从表中筛选出Holiday_Flag = 1的所有行,再按Date分组计算每周销售额总和,返回的是符合筛选条件的日期分组,所以只有10行。 - 不带
WHERE的SQL:没有做任何筛选,是对整张表的所有行按Date分组求和,只是在结果里额外加了一列固定为1的Holiday_Flag,所以分组数是全表的所有不同日期,共143行,和你想要的筛选完全无关。
正确写法
如果你想筛选Holiday_Flag = 1且不显示该列,你的第一个SQL写法就是正确的:
SELECT Date, SUM(CAST(Weekly_Sales AS FLOAT)) AS Weekly_Sales FROM WalmartSalesClean WHERE Holiday_Flag = 1 GROUP BY Date ORDER BY Weekly_Sales DESC;
补充说明
你尝试的SELECT = '1'或者WHERE='1'都是语法错误(WHERE的写法会直接报错),你说结果无变化大概率是数据库兼容导致的忽略错误,但核心问题还是混淆了SELECT列赋值和WHERE筛选的逻辑。
内容的提问来源于stack exchange,提问作者Iceyes123
相关产品推荐
相关产品推荐

