powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Торможу с запросом с группировкой...
10 сообщений из 10, страница 1 из 1
Торможу с запросом с группировкой...
    #38635497
Shart_Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица пациентов, у каждого пациента есть реанимационный синдром (RDS_id - ссылка на id справочника реанимационных синдромов RDS_SPR ) и тип исхода (=2 если смерть). Надо получить отчет с распределением пациентов по синдромам с выводом процента летальности. Как процент летальности посчитать - не могу сообразить.
Вот запрос который выводит общее количество пациентов и количество умерших. По идее надо к небу еще один столбец под названием процент летальности.
Код: sql
1.
2.
select RDS_SPR.comm, Count(Persons.id) as AllPersons, count(case when endtype_id=2 then 1 else null end )as lethal from Persons inner join rds_spr on Persons.RDS_ID=RDS_SPR.id where cast(Persons.beginDT as Date)>=:Dt1 and Cast(Persons.begindt as Date)<=:DT2
group by RDS_SPR.comm



По идее, надо уже после группировки поделить : lethal/AllPersons если AllPersons>0, но как это в SQL сделать?
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635503
Shart_Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635507
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shart_Sonia,

как то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select RDS_SPR.comm, 
         count(Persons.id) as AllPersons, 
         count(case 
                    when endtype_id=2 
                    then 1 
                    else null 
                  end ) as lethal,
         count(case 
                     when endtype_id=2 
                     then 1 
                     else null 
                  end ) / nullif(count(Persons.id), 0) * 100 as lethal_percent
from Persons 
inner join rds_spr on Persons.RDS_ID=RDS_SPR.id 
where cast(Persons.beginDT as Date)>=:Dt1 and Cast(Persons.begindt as Date)<=:DT2
group by RDS_SPR.comm
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635511
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чтобы не было дублирования кода можно DT или CTE использовать

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH STAT AS (
select RDS_SPR.comm as comm, 
         count(Persons.id) as AllPersons, 
         count(case 
                    when endtype_id=2 
                    then 1 
                    else null 
                  end ) as lethal
from Persons 
inner join rds_spr on Persons.RDS_ID=RDS_SPR.id 
where cast(Persons.beginDT as Date)>=:Dt1 and Cast(Persons.begindt as Date)<=:DT2
group by RDS_SPR.comm)
select comm,
         AllPersons,
         lethal,
         lethal / nullif(AllPersons, 0) * 100
from STAT 
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635525
Shart_Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, Не ругается, но результат не тот получился:
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635539
Shart_Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

переставила * на 100 и добавила скобки - вроде заработало. Спасибо!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH STAT AS (
select RDS_SPR.comm as comm, 
         count(Persons.id) as AllPersons, 
         count(case 
                    when endtype_id=2 
                    then 1 
                    else null 
                  end ) as lethal
from Persons 
inner join rds_spr on Persons.RDS_ID=RDS_SPR.id 
where cast(Persons.beginDT as Date)>=:Dt1 and Cast(Persons.begindt as Date)<=:DT2
group by RDS_SPR.comm)
select comm,
         AllPersons,
         lethal,
         (lethal*100) / nullif(AllPersons, 0)
from STAT 
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635540
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shart_Soniaрезультат не тот получился:целочисленная арифметика?
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635544
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shart_SoniaСимонов Денис, Не ругается, но результат не тот получился:

и вот причина
integer/integer есть integer
зы. а дальше сам
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635548
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shart_Sonia(lethal*100) / nullif(AllPersons, 0)

Верно. Это 3 диалект. Там надо не на 100 умножать а на 100.00 (зависит какая точность нужна)
...
Рейтинг: 0 / 0
Торможу с запросом с группировкой...
    #38635573
Shart_Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

точно, на 100.00 - замечательно получается. Спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Торможу с запросом с группировкой...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]