获取比 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
考虑以下 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