我不确定标题是否正确解释了问题,但我会尽量清楚。我对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
基本查询如下
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
你可以加