Как выбрать значение из таблицы в сложном состоянии? - PullRequest
1 голос
/ 18 апреля 2019

У меня есть таблица с 3 столбцами: course_name, year, semester.

Теперь я хочу выяснить, какие предметы проходят курсы в каждом семестре (S1 и S2) в каждый год (2001 и 2002).

Я в течение часа пытался написать CASE WHEN и GROUP BY HAVING, но не смог получить правильный результат.

table_subjects :

course_name| year| semester
Programming   2001   S1
Programming   2001   S2
Programming   2002   S1
Programming   2002   S2
Law           2001   S1
Law           2001   S2
Law           2002   S2
Science       2001   S1
Science       2001   S2
Management    2002   S2
AI            2001   S1
Database      2001   S1
Database      2001   S2
Database      2002   S1
Database      2002   S2

Ожидаемый результат:

|course_name|
 Programming
 Database

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Вы можете попробовать ниже -

DEMO

select course_name
from t1 a
where year in (2001,2002) and exists (select 1 from t1 b where a.course_name=b.course_name
and a.year=b.year and semester in ('S1','S2') having count(distinct semester)=2)
group by course_name
having count(distinct year)=2 

ВЫВОД:

course_name
Database
Programming
0 голосов
/ 18 апреля 2019
SELECT T.course_name
FROM
(
    SELECT course_name
    FROM table_subjects
    GROUP BY course_name,
             year
    HAVING COUNT(1) = 2
) T
GROUP BY T.course_name
HAVING COUNT(1) = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...