SQL возвращает имена людей, которые прошли все курсы в списке - PullRequest
0 голосов
/ 03 июля 2019

Мне нужен запрос SQL, который позволит мне вернуть значения (студенты), которые прошли все курсы в списке.

Например:

+-----+-------+---------+
| Key | Name  | Course  |
+-----+-------+---------+
| 1   | Mike  | Maths   |
| 2   | Dave  | English |
| 3   | Chris | Science |
| 4   | Andy  | Maths   |
| 5   | Mike  | German  |
| 6   | Dave  | Science |
| 7   | Chris | English |
| 8   | Chris | Maths   |
| 9   | Dave  | Maths   |
+-----+-------+---------+

Мне нужны всеимена учеников, которые прошли все курсов в списке.Список будет меняться с каждым запросом.В качестве примера, мне нужны имена людей, которые выполнили «Английский», «Математика» и «Наука», которые будут возвращаться:

"Chris"
"Dave"

Длина списка может быть любым количеством курсов.Вывод будет использоваться в других SQL-запросах и является частью гораздо более крупного проекта, однако, чтобы облегчить понимание, я постарался максимально упростить свою проблему.

Я действительно почесал головуо том, как этого добиться.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Вы должны group by name и поставить условия в предложениях WHERE и HAVING:

select name
from tablename
where course in ('English', 'Maths', 'Science')
group by name
having count(distinct course) = 3
0 голосов
/ 03 июля 2019

Я бы рассмотрел возможность переоценки вашей модели данных, но с учетом того, что вы предоставили, это сработает.

Базовое решение:

SELECT Name 
FROM Table T1 
LEFT JOIN Table T2 
ON T1.Name = T2.Name and T2.Course = 'Maths'
LEFT JOIN Table T3
ON T1.Name = T3.Name and T3.Course = 'English'
LEFT JOIN Table T3 
ON T1.Name = T4.Name and T4.Course = 'Science'
WHERE T2.Course IS NOT NULL AND T3.Course IS NOT NULL AND T4.Course IS NOT NULL

Более обобщенное решение:

SELECT Name, [English], [Science], [Maths], [German]
FROM Table
PIVOT (max(Course) FOR Name IN ([English],[Science],[Maths],[German])) AS Pivot
WHERE [English] IS NOT NULL AND [Science] IS NOT NULL AND [Maths] IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...