我试图找出为什么 SELECT Holiday_Flag = 1 和 WHERE Holiday_Flag = 1 返回不同的输出。我想使用 WHERE 的原因是为了在输出期间不显示 Holiday_Flag 列。但是,它们都使用来自同一个表的数据,并且 Holiday_Flags 列是 INT。
代码如下:
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;
输出:
它仅包含 10 行。
但是这段代码包含 143 行:
SELECT Holiday_Flag = 1, Date, SUM(CAST(Weekly_Sales AS FLOAT)) AS Weekly_Sales
FROM WalmartSalesClean
GROUP BY Date
ORDER BY Weekly_Sales DESC;
输出:
我尝试过
WHERE='1'
或SELECT = '1'
,但似乎没有改变任何东西。为什么 SELECT 和 WHERE 返回不同的输出,即使它们都过滤 Holiday_Flags = 1?
SELECT Holiday_Flag = 1
在结果中定义一个名为 Holiday_Flag
的列,其值始终为常量 1
。它不会将任何源表中的 Holiday_Flag
列与值 1 进行比较。它不会且无法过滤任何行。您只能通过
WHERE
、ON
、
CROSS APPLY
和
HAVING
子句过滤行。