You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求简化SQL聚合查询方案:无需临时表计算人均病例数

无临时表实现Covid病例统计查询

核心思路

要获取每个国家的最新total_cases并计算cases_per_capita,关键是先定位每个国家的最新日度记录,同时利用Population在同一国家内数值固定的特点,直接聚合取值即可。

方案1:使用窗口函数(推荐)

窗口函数可以直接对每个国家的记录按日期排序,标记出最新的那条,无需临时表:

SELECT
    Location AS 国家名称,
    total_cases AS 最新累计病例数,
    ROUND(total_cases / MAX(Population) OVER (PARTITION BY Location), 6) AS cases_per_capita
FROM (
    SELECT
        Continent,
        Location,
        Population,
        total_cases,
        ROW_NUMBER() OVER (PARTITION BY Location ORDER BY 日期列 DESC) AS rn
    FROM CovidCasesAndDeaths
) t
WHERE rn = 1
ORDER BY Location;
  • 内层子查询用ROW_NUMBER()按国家分组、日期倒序排序,给每条记录标记行号rn,行号1就是该国家的最新记录
  • 外层筛选rn=1的记录,同时用MAX(Population) OVER (PARTITION BY Location)确保取到对应国家的人口数(因为同一国家人口固定,用MIN/MAX/直接取都可以)
  • ROUND()用来控制cases_per_capita的小数位数,可按需调整

方案2:子查询关联最新日期

如果不熟悉窗口函数,也可以先获取每个国家的最新日期,再关联原表获取对应数据:

SELECT
    c.Location AS 国家名称,
    c.total_cases AS 最新累计病例数,
    ROUND(c.total_cases / c.Population, 6) AS cases_per_capita
FROM CovidCasesAndDeaths c
INNER JOIN (
    SELECT Location, MAX(日期列) AS latest_date
    FROM CovidCasesAndDeaths
    GROUP BY Location
) l ON c.Location = l.Location AND c.日期列 = l.latest_date
ORDER BY c.Location;
  • 子查询先按国家分组,得到每个国家的最新日期latest_date
  • 关联原表,匹配国家和最新日期,就能拿到对应的最新total_cases
  • 因为同一国家同一日期的Population值唯一,直接用c.Population计算即可

内容的提问来源于stack exchange,提问作者Reynal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:09