Window 函数未给出总计 运行

Window function not giving running total

在以下查询中:

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

window 函数只是根据日期给出每个位置的总数,而不是 运行 总数。 我做错了什么?

要获得 运行 累计总数,必须在 OVER 中指定或暗示 RANGEROWS window,因此 你还需要添加一个ORDER BY。否则 window 是完整分区。

一旦您指定 ORDER BY默认隐含的 window 是 RANGE UNBOUNDED PRECEDING,对于来自 ROWS.

鉴于 date 可能不是唯一的,您还需要 ROWS UNBOUNDED PRECEDING.

SELECT
 d.date,
 d.location,
 d.population,
 v.new_vaccinations,
 SUM(CAST(v.new_vaccinations AS int))
    OVER (PARTITION BY d.location ORDER BY d.date ROWS UNBOUNDED PRECEDING) 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