Как округлить до 100 в SQL

select 
    concat(round((sum(gender='M')/count(gender)) * 100, 100), '%') as per_num
from 
    patients

Вопрос состоит в том, чтобы найти процент пациентов пола М и округлить его до сотых со знаком процента.

Показанный здесь синтаксис отображает ответ как 0%.

Похоже, ты хочешь sum(gender='M') * 100 / count(gender)

Ted Lyngmo 22.06.2024 09:50

Какую систему баз данных вы используете? sum(gender='M') во многих случаях будет недопустимым синтаксисом. И даже если это правильный синтаксис, вы суммируете логическое значение?

Martin Smith 22.06.2024 09:54

База данных SQL и sum(gender='M') работают, не выдают никаких ошибок, но часть вычислений не работает. Да, это логический столбец.

Reshma Reghunandan 22.06.2024 10:39
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема с вашим запросом заключается в том, как вы выполняете операцию округления и обрабатываете деление.

Ниже приведено решение

SELECT 
  CONCAT(
    ROUND(
      (SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 
      2
    ), 
    '%'
  ) AS per_num
FROM 
  patients;

SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END): подсчитывается количество пациентов с полом «М». (SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) / COUNT(*)) * 100: рассчитывается процент пациентов с полом «М». ROUND(..., 2): Результат округляется до сотых. CONCAT(..., '%'): добавляет к результату знак процента.

Этот запрос должен дать вам нужный процент в правильном формате.

Ответ принят как подходящий

Вам необходимо привести числитель или знаменатель к типу с плавающей запятой, что можно сделать либо путем явного приведения, либо умножив на 1,0, как показано ниже. Чтобы получить округленное значение, приведите его к числовому типу перед операцией конкатенации.

SELECT concat(
  CONVERT(NUMERIC(10,2), (sum(CASE WHEN gender='M' THEN 1 ELSE 0 END)*1.0/count(gender))*100),'%') as per_num
FROM patients;

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