Чтобы сделать новый столбец из вычисляемого столбца, выберите в SQL-запросе

У меня есть данные о смерти от covid на конкретную дату с 2020 по 2022 год в конкретной. Я хочу рассчитать процент смертности за 2 года для каждой страны, используя группу по стране.

Я пытаюсь сделать запрос как таковой, но запрос не будет работать, потому что использование подзапроса в качестве выражения не разрешено. Как заставить этот запрос работать? Спасибо.

SELECT 
   location, 
   sum(total_deaths) as total_deaths, 
   sum(total_cases) as total_cases, 
   (select SUM(total_deaths) 
    FROM CovidDeaths$ 
    GROUP BY location
   )/
   (select sum(total_cases) 
    FROM CovidDeaths$ 
    GROUP BY location
   ) *100 as DeathPercentage 
FROM CovidDeaths$ 
WHERE NOT (total_deaths is null 
           OR total_cases is null 
           OR continent is null
          ) 
GROUP BY location
ORDER BY 1 

*местоположение в запросе относится к стране

Я пытаюсь сделать вложенный запрос, но значение процента смерти становится равным 0.

SELECT location, total_deaths1, total_cases1, total_deaths1/total_cases1*100 as Death_Percentage

FROM(

SELECT location, sum(total_deaths) as total_deaths1, sum(total_cases) as total_cases1

FROM CovidDeaths$ 

WHERE NOT (total_deaths is null OR total_cases is null OR continent is null) 

GROUP BY location

) as death

ORDER BY 1
Structured Query Language (SQL) is a language for querying databases. Questions should include code examples, table structure, sample data, and a tag for the DBMS implementation (e.g. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, etc.) being used. If your question relates solely to a specific DBMS (uses specific extensions/features), use that DBMS's tag instead. Answers to questions tagged with SQL should use ISO/IEC standard SQL. => Пожалуйста, отметьте свой вопрос с помощью базы данных, которую вы используете, в идеале включая версию
MatBailie 23.04.2022 17:44
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам не нужно вычислять среднее значение в подзапросе, вы можете просто рассчитать его в своем основном запросе.

(SUM(total_deaths)/sum(total_cases))*100

ОБНОВИТЬ

Этот вычисляемый столбец является частью вашего основного запроса, который вы группируете по местоположению:

SELECT 
location, 
sum(total_deaths) as total_deaths, 
sum(total_cases) as total_cases, 
(SUM(total_deaths)/sum(total_cases))*100
FROM CovidDeaths$ 
WHERE NOT (total_deaths is null 
       OR total_cases is null 
       OR continent is null
      ) 
GROUP BY location
ORDER BY 1 

Но мне нужно общее количество смертей и общее количество случаев для каждой из стран. Не все общие смерти ряда.

Sofiyah Rahmat 23.04.2022 15:48

@SofiyahRahmat - переключение между терминами «местоположение» и «страна» бесполезно. Это одно и то же? (Если это так, придерживайтесь термина, используемого в коде.) Тогда в чем разница между "всего по строке" и "всего по местоположению"? (В идеале продемонстрируйте разницу на примерах в вашем вопросе.)

MatBailie 23.04.2022 17:48
Ответ принят как подходящий

Многие базы данных используют целочисленную арифметику, когда целые числа используются для деления. Поскольку между 0 и 1 нет целых чисел, это означает, что все ваши значения округляются до 0 перед умножением на 100.

  • 2 / 6 * 100 => 0 * 100 => 0

Вы можете просто изменить порядок операций

  • 100 * 2 / 6 => 200 / 6 => 66

Или неявно преобразовать значения в нецелочисленный тип

  • 100.0 * 2 / 6 => 200.0 / 6 => 33.3333333

Вы также можете использовать CAST(), CONVERT() или другие функции, чтобы явно преобразовать тип данных (возможно, DECIMAL(18,6) или FLOAT, в зависимости от ваших потребностей).

  • Точный синтаксис зависит от того, какую базу данных вы используете.
  • Но вы не указали, какая база данных

Я изменил порядок операций, чтобы правильно рассчитать процент смертности. Спасибо!

Sofiyah Rahmat 23.04.2022 18:15

Другие вопросы по теме