Есть таблица результатов экзаменов по русскому языку и математике:
declare @Results Table
(
SchoolID nvarchar(200),
ParticipID nvarchar(200),
SubjectCode int,
TestResult5 int
)
--subjectcode: 1-русский язык, 2-математика
insert into @Results VALUES
('0001', 'Шахабов_Адам', 1, 4),
('0001', 'Асвадов_Аюб', 1, 3),
('0001', 'Майрукаев_Бекхан', 1, 3),
('0001', 'Шахабов_Адам', 2, 3),
('0001', 'Асвадов_Аюб', 2, 4),
('0001', 'Майрукаев_Бекхан', 2, 5),
('0002', 'Цуригова_Зайнап', 2, 5),
('0002', 'Майрукаев_Роза', 2, 4),
('0002', 'Муциев_Адлан', 2, 3),
('0002', 'Цуригова_Зайнап', 1, 3),
('0002', 'Майрукаев_Роза', 1, 4),
('0002', 'Муциев_Адлан', 1, 5)
Условие: Необходимо извлечь список школ (SchoolID), у которых число участников, получивших отметку 3 по русскому языку, больше 1.
Как я это делаю:
select schoolid from
(select schoolid,
SUM(CASE WHEN subjectcode = 1 and testresult5 = 3 then 1 else 0 end) c
from @Results
group by schoolid) temp_table
where c > 1
Необходимо: оптимизировать данный запрос.
Конечно, на этом примере код выглядит не совсем большим. Я специально показал маленький пример. Все ли правильно я делаю? Можно ли как-то обойтись без подзапроса в этом случае?
Ответ
Вам поможет HAVING:
SELECT schoolid, COUNT(ParticipID)
FROM @Results
WHERE subjectcode = 1 AND testresult5 = 3
GROUP BY schoolid
HAVING COUNT(ParticipID) > 1
http://sqlfiddle.com/#!9/fe6b2/1/0
https://ru.wikipedia.org/wiki/Having_(SQL)
Комментариев нет:
Отправить комментарий