分组按多个子查询

问题描述 投票:-1回答:1

我不确定标题是否正确解释了问题,但我会尽量清楚。我对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 
sql sql-server subquery left-join outer-join
1个回答
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,通过研讨会会话计算来自学校的参与者
© www.soinside.com 2019 - 2024. All rights reserved.