Группировать по нескольким подзапросам - PullRequest
0 голосов
/ 27 апреля 2019

Я не уверен, правильно ли объясняется вопрос в названии, но я постараюсь быть максимально ясным. Я не очень опытен в SQL.

В основном у меня есть база данных, которая имеет следующие таблицы:

Школа, Мастерская, Мастерская_История, Участники.

Участник принадлежит к одной школе, Так что в одной школе много участников.

Таблица Мастерская показывает подробную информацию о конкретной мастерской. Таблица Workshop_History показывает экземпляры семинара, которые происходят в определенную дату, Таким образом, один тип семинаров происходит много раз и, следовательно, также имеет отношение один ко многим.

В одном семинаре на определенную дату (из Workshop_History) много участников.

Мне нужно написать запрос, который показывает всех участников, которые посещали определенный семинар по Школе,

В таблице должны быть указаны все названия школ в левом объединении, а справа - количество всех участников, которые посетили конкретный семинар в зависимости от школы, к которой они принадлежат.

Это таблицы:

School
Id integer NOT NULL, IDENTITY(1,1) PRIMARY KEY
Name varchar(255)

Participants
Id, FName, LName, Email, Phone,
SchoolId FOREIGN KEY

Workshop
Id, Name varcha NOT NULL, IsMandatory bit

Workshop_History
Id, DateTime, WorkshopId

Workshop_Participants
Workshop_HistoryId, ParticipantId
CONSTRAINT PRIMARY KEY(Workshop_HistoryId, ParticipantId),
CONSTRAINT FOREIGN KEY(Workshp_HistoryId)
REFERENCES Workshop_History(Id)
CONSTRAINT FOREIGN KEY(ParticipantId)
REFERENCES Participant(Id)

This is all I have at the moment:
SELECT School.SName, COUNT()
-- Count the number of Participants who belong to the school and    attended the specified workshop
FROM School
LEFT JOIN Participant
ON School.Id = Participant.SchoolId and 

1 Ответ

0 голосов
/ 27 апреля 2019

Основной запрос будет выглядеть следующим образом

select s.name school_name, w.name workshop_name, count(distinct p.id)
from school s
join participants p on p.schoolId = s.schoolId
join Workshop_Participants wp on wp.ParticipantId = p.id
join Workshop_History wh on wh.id = wp.Workshop_HistoryId
join Workshop w on wh.WorkshopId = w.id
group by s.name, w.name

Вы можете добавить

  1. ГДЕ пункт в этом, чтобы применить фильтр и школу и / или мастерскую
  2. Ввести семинар_истории в SELECT и GROUP BY для подсчета участников из школы к сеансу семинара
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...