获取比 SQLite3 中的 AVG(子查询)更大的(子查询)列表

Get greater (subquery ) list than the AVG (subquery) in SQLite3

考虑以下 table:

    covid_data(
        CASES               INT,
        DEATHS              INT,
        COUNTRIES           VARCHAR(64),
    );

我正在尝试获取死亡率高于平均死亡率的国家/地区的名称。我用来计算每 1000 例死亡人数的公式是: (死亡人数/病例数)* 1000 要获取 AVG,我使用此查询:

    SELECT AVG(rate)
    FROM (
          SELECT CAST(SUM(deaths) AS FLOAT) / SUM(cases) * 1000  AS rate
          FROM covid_data
    ) covid_data;

要列出比率高于此 AVG 的国家/地区,这是我迄今为止尝试过的众多尝试之一。

SELECT countries, CAST(SUM(deaths) AS FLOAT) / SUM(cases) * 1000 AS RATEM
FROM covid_data
GROUP BY countries
HAVING RATEM > (SELECT AVG(RATE)
FROM (
      SELECT CAST(SUM(DEATHS) AS FLOAT) / SUM(CASES) * 1000  AS RATE
      FROM covid_data
     ) covid_data);

返回错误:没有这样的列:RATEM

如您所见,我正在为这些基本概念而苦苦挣扎,我希望任何 books/courses/resources 能够更好地理解这种关系。

您可以使用 window 函数:

SELECT cd.country
FROM (SELECT cd.*, 
             SUM(deaths * 1.0) OVER () / SUM(cases) OVER () as mortality_ratio
      FROM covid_data
     ) cd
WHERE (deaths * 1.0 / NULLIF(cases, 0)) > mortality_ratio;

请注意,每个国家/地区的平均死亡率与总体死亡率不同。我想你明白这一点,但我只想强调这一点。平均比率为:

AVG(deaths * 1.0 / NULLIF(cases, 0))

您可以使用 window 函数:

select t.*
from (
    select
        t.*,
        1.0 * deaths / cases rate,
        1.0 * sum(deaths) over() / sum(cases) over() avg_rate
    from covid_date
) t
where rate > avg_rate