按多个子查询分组

时间:2019-04-27 11:48:28

标签: sql sql-server subquery left-join outer-join

我不确定标题是否正确解释了问题,但我会尽量保持清楚。我对SQL不太有经验。

基本上我有一个包含以下表格的数据库:

学校,工作坊,Workshop_History,参与者。

一个参与者属于一所学校, 所以一所学校有很多参与者。

工作坊表显示有关特定工作坊的详细信息。 Workshop_History表显示了在特定日期发生的研讨会实例, 因此,一种类型的Workshop会多次发生,因此也具有一对多的关系。

一个特定日期的讲习班(来自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 :(得分:0)

基本查询如下

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. 此中的WHERE子句适用于过滤器以及学校和/或工作坊
  2. 在SELECT和GROUP BY中引入workshop_history,以按研讨会的次数统计学校的参与者