【发布时间】:2021-08-22 11:38:32
【问题描述】:
在以下查询中:
SELECT
d.date,
d.location,
d.population,
v.new_vaccinations,
SUM(CAST(v.new_vaccinations AS int)) OVER (PARTITION BY d.location) AS total_vaccinations
FROM
CovidDeaths d
JOIN
CovidVaccinations v
ON
d.date = v.date
AND
d.location = v.location
WHERE
d.continent IS NOT NULL
ORDER BY
d.location,
d.date
窗口函数只是给出每个位置的总数,而不是根据日期的运行总数。 我做错了什么?
【问题讨论】:
-
如果你想要一个“运行总数”,你需要在
OVER子句中添加一个ORDER BY子句。否则SUM将包括PARTITION中的所有行。 documentation includes an example. -
@Larnu:谢谢。我试过这个并且它有效,但我仍然无法理解它为什么有效。我阅读了文档,它说-“在 OVER 子句中指定的 ORDER BY 子句确定了 SUM 函数应用的逻辑顺序。”但这不只是意味着只有订单受到影响吗?它怎么能给出运行总数?
-
查看它链接到的文档,如果没有指定,请密切注意默认边界:OVER Clause (Transact-SQL) - ORDER BY
标签: sql-server window-functions