Сложный sql запрос

Рейтинг: 0Ответов: 1Опубликовано: 23.12.2014

Есть запрос:

select name_fak "Факультет", 
       god "Учебный год", 
       kurs "Курс", 
       count(distinct fio) "Всего",
       (select count(distinct fio) from bi_balls_m where seex='ж') "Из них женщин",
       (select count(distinct fio) from bi_balls_m where id_fin = 1) "Бюджет",
       (select count(distinct fio) from bi_balls_m where id_fin = 1 and seex='ж') "Из них женщин"
from   bi_balls_m, fak
where  fak.id_fak = bi_balls_m.id_fak
group  by name_fak, god, kurs
order  by name_fak, god, kurs

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

Ответы

▲ 1Принят

Вместо подзапросов вставьте:

sum(case when b.seex ='ж' then 1 else 0 end) "Из них женщин",
sum(case when b.id_fin=1 then 1 else 0 end) "Бюджет",
sum(case when b.id_fin=1 and b.seex ='ж' then 1 else 0 end) "Из них женщин"

ЗЫ И псевдоним для bi_balls_m добавьте, например, как выше: b.
ЗЗЫ Одинаковые псевдонимы ("Из них женщин") не есть гуд.
ЗЗЗЫ Используйте ansi join и старайтесь не злоупотреблять distinct.