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
中指定或暗示 RANGE
或 ROWS
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
在以下查询中:
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
中指定或暗示 RANGE
或 ROWS
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