我使用以下代码内部连接了三个表 CC、学生和教师:
SELECT CC.Course_number , CC.Expression, teachers.Lastfirst, students.gender, teachers.sched_department
From CC
inner join students ON CC.StudentID=students.ID
inner join teachers ON CC.TeacherID=Teachers.ID
Where CC.SchoolID=151 and CC.TermID=2401
Order by teachers.sched_department, CC.course_number, Teachers.Lastfirst, CC.Expression, students.gender
代码有效,我得到一个列表,其中包括类(class)代码、类(class)周期、教师姓名、部门和性别。
但是我希望的输出是压缩格式,如下所示:
类(class)号
(一次)来自 CC 表,类(class)表达式
来自 CC 表,教师
来自教师表,部门
code> 来自教师表,男性
(计入该特定类(class))来自学生表,女性
(计入该特定类(class))来自学生表。
我最后尝试的代码是这样的:
SELECT
CC.Course_number , CC.Expression, teachers.Lastfirst, teachers.sched_department, male_cnt, female_cnt
From CC
inner join teachers
ON CC.TeacherID = Teachers.ID
inner join (Select students.ID, count(case when students.gender= 'M' then students.ID end) as male_cnt, count(case when students.gender= 'F' then students.ID end) as female_cnt
From Students
Where
students.SchoolID=151
Group By students.ID)
ON CC.StudentID=students.ID
Where CC.SchoolID=151 and CC.TermID=2401
Order By
teachers.sched_department, CC.course_number, Teachers.Lastfirst, CC.Expression
任何建议都会很棒。
最佳答案
在不知道表结构和示例输入/输出数据的情况下,很难准确说出您在寻找什么,但也许这就是您想要的?如果不是,请澄清您的要求并添加示例数据。
SELECT
CC.Course_number,
CC.Expression,
Teachers.Lastfirst,
Teachers.sched_department,
SUM(students.gender = 'male') AS males,
SUM(students.gender = 'female') AS females
FROM CC
INNER JOIN Students ON CC.StudentID = students.ID
INNER JOIN Teachers ON CC.TeacherID = Teachers.ID
WHERE CC.SchoolID = 151 and CC.TermID = 2401
GROUP BY
CC.Course_number,
CC.Expression,
Teachers.Lastfirst,
Teachers.sched_department
ORDER BY
teachers.sched_department,
CC.course_number,
Teachers.Lastfirst,
CC.Expression
Sample SQL Fiddle (对表结构有很多假设......)
关于mysql - 内连接表后的性别计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033886/