内连接查询逻辑

时间:2021-02-05 05:20:32

标签: sql-server

我正在使用 Sql Server Management Studio。

我有下表。

enter image description here

当我运行以下查询时,我得到了销售列

的运行总数
select s1.date,
sum(s2.sales)
from sales s1
join sales s2 on s1.date>=s2.date
group by s1.date;

但是当我在选择中用 s1.sales 替换 s2.sales

select s1.date,
**sum(s1.sales)**
from sales s1
join sales s2 on s1.date>=s2.date
group by s1.date;

它给了我一个不同的答案有人可以帮助我理解为什么我会面临这个问题吗?因为销售列值应该相同。

1 个答案:

答案 0 :(得分:0)

运行总查询的第一个版本是对每个日期的销售额求和,日期严格小于或等于每个记录中的日期。当您将 s2.sales 更改为 s1.sales 时,您将对当前记录的销售额求和 N 次,其中 N 是具有较早日期的记录数。这显然不是你想要的逻辑,所以坚持第一个版本。

顺便说一句,如果您使用的是 MySQL 8+,那么分析函数会进一步简化:

SELECT Date, Sales, SUM(Sales) OVER (ORDER BY Date) RunningSales
FROM sales
ORDER BY Date;