Вопрос: Найдите процент людей, умерших из случаев, зарегистрированных для каждой страны.Поиск совокупности по таблице соединений - SQL SERVER
Данные находятся в двух таблицах-случаях и смерти. В обеих таблицах есть столбцы страны. Смерть - это столбец с no. смертей в таблице смертей. И случаи - это случаи, которые указаны в таблице случаев.
С помощью следующего запроса,
SELECT (sum(isnull(d.deaths,0))/sum(isnull(c.cases,0)))*100
FROM cases as c
JOIN death as d ON c.country=d.country
Im получить ответ 0.54493487236178.
==
АГРЕГИРОВАНИЕ отдельно и усреднение, я получаю в среднем, как в следующем. (То же самое в первенствует)
SELECT sum(cases) FROM cases
Значение 106036635
SELECT sum(deaths) FROM death
Значение 716111
(716111/106036635)*100= 0.675343008.
Каким образом оба значения отличаются !!
==
ТАКЖЕ
SELECT c.country, (sum(d.deaths)/sum(c.cases))*100
FROM cases as c
JOIN death as d ON c.country1=d.country1 AND c.cases IS NOT NULL AND d.deaths IS NOT NULL
GROUP BY c.country
дает мне Divide by zero error encountered.
! Я понимаю, что мои коды довольно уродливые и давно я новичок. Plz помогите мне ..
У вас есть пара вопросов здесь. Во-первых, мы не можем видеть, что происходит.Но в дивизоре вашего первого вычисления у вас есть ISNULL (xx, 0). Это означает, что если сумма случаев равна нулю, вы попытаетесь разделить на 0. Вторая проблема заключается в том, что ваши запросы для получения значений НЕ совпадают с запросом с вычислением, потому что ваш основной запрос имеет соединения, и ваш запрос проверки работоспособности не. –
Действительно благодарю @SeanLange за то, что вы изучили это. Проблема в том, что если я удаляю «IS NULL», то и я получаю то же самое .54493487236178! Я поставил «IS NULL» для того, чтобы избежать «Разделить по нулевой ошибке». Теперь я не там, где я себя чувствую :( – ajufsd
Эти способы, которые вы ставите, вместе не будут избегать деления на нулевую проблему здесь. Подумайте, есть ли все строки в случаях null. (У вас действительно есть таблица и столбец с тем же именем?) Если все они NULL, у вас будет ошибка деления на 0. –