Отображение результатов в SQL, соответствующих критериям

#mysql #sql #sum #pivot #having-clause

#mysql #sql #сумма #сводная #наличие-предложение

Вопрос:

выберите только те 10 лучших больниц, в которых есть оба типа коек в отделении интенсивной терапии и отделении интенсивной терапии, т. Е. В эту часть анализа могут быть включены только больницы, в которых есть как минимум 1 койка в отделении интенсивной терапии и как минимум 1 койка в отделении интенсивной терапии. Вот что у меня есть до сих пор

 select bu.business_name as 'Hospital Name'
,sum(be.license_beds) as Total_Licenses
,case when be.bed_id = 4 then 'ICU' end as "ICU"
,case when be.bed_id = 15 then 'SICU' end as "SICU"
from bed_fact be 
join bed_type bt 
  on be.bed_id = bt.bed_id
join business bu 
  on be.ims_org_id = bu.ims_org_id
where be.bed_id = 4 
    or be.bed_id = 15
and be.license_beds IS NOT NULL
group 
    by bu.business_name
order 
    by Total_Licenses DESC
limit 10
;
  

Мне нужно как-то подсчитать только больницу, в которой есть хотя бы одно значение ICU или SICU

Ответ №1:

Вам нужна условная агрегация и having предложение:

 select 
    bu.business_name as Hospital_Name,
    sum(be.license_beds) as Total_Licenses,
    sum(be.bed_id = 4) as ICU,
    sum(be.bed_id = 15) as SICU
from bed_fact be 
inner join bed_type bt on be.bed_id = bt.bed_id
inner join business bu on be.ims_org_id = bu.ims_org_id
where be.bed_id in (4, 15) and be.license_beds is not null
group by bu.business_name
having ICU > 0 and SICU > 0
order by Total_Licenses desc
limit 10
  

Если вы не знаете, какие подсчеты в результирующем наборе, переместите агрегатные функции в having предложение:

 select 
    bu.business_name as Hospital_Name,
    sum(be.license_beds) as Total_Licenses
from bed_fact be 
inner join bed_type bt on be.bed_id = bt.bed_id
inner join business bu on be.ims_org_id = bu.ims_org_id
where be.bed_id in (4, 15) and be.license_beds is not null
group by bu.business_name
having sum(be.bed_id = 4) > 0 and sum(be.bed_id = 15) > 0
order by Total_Licenses desc
limit 10
  

Комментарии:

1. отлично, еще один вопрос, мне нужно отобразить только название больницы и total_license, но с условиями, которые вы добавили. Как я могу это сделать?

2. Это именно то, что я искал. Большое вам спасибо.