Получить больший (подзапрос) список, чем AVG (подзапрос) в SQLite3 - PullRequest
1 голос
/ 04 апреля 2020

рассмотрим следующую таблицу:

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

Я пытаюсь получить названия стран, уровень смертности которых превышает уровень смертности AVG. Формула, которую я использую, чтобы получить число смертей на каждые 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

Как вы можете Понимаете, я борюсь с этими основополагающими понятиями, которые я бы также оценил, а также любые книги / курсы / ресурсы, чтобы лучше понять эти отношения.

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Вы можете использовать оконные функции:

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))
0 голосов
/ 04 апреля 2020

Вы можете использовать оконные функции:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...