是否可以根据两列的组合执行计数?
我有3张桌子:
学生:
Student id | Student name | Gender | Dob |
班级注册:Student id | Class id
两列都构成复合主键。
课程:Class id | Class name | Class day
我想计算每个班级每个性别的学生人数。
到目前为止,我想出了这个问题:
SELECT class_name AS 'class Name',
Child_gender AS 'Gender',
COUNT(student_id) AS 'Count'
FROM student,classRegister,classes
WHERE student.student_id=classRegister.student_id AND
classRegister.class_id=classes.class_id
GROUP BY class_name,student_gender
ORDER BY class_name;
但它似乎给了我一些学生的重复结果。
那么,我可以修改此查询以计算student_id
和class_id
组合的实例数吗?
我还是MySQL的新手,所以如果这对每个人来说都是基本的,我会道歉
答案 0 :(得分:1)
试试这个:
SELECT c.class_name AS 'class Name', s.Child_gender AS 'Gender',
COUNT(s.student_id) AS 'Count'
FROM student s
INNER JOIN classRegister cr ON s.student_id = cr.student_id
INNER JOIN classes c ON cr.class_id = c.class_id
GROUP BY s.Child_gender, s.class_id, c.class_name
ORDER BY c.class_name
答案 1 :(得分:0)
SELECT c.class_name AS 'class Name', s.Child_gender AS 'Gender',
COUNT(DISTINCT s.student_id) AS 'Count'
FROM student s
INNER JOIN classRegister cr ON s.student_id = cr.student_id
INNER JOIN classes c ON cr.class_id = c.class_id
GROUP BY c.class_name, s.Child_gender
如果他们在classRegister中有多个注册,您可能会多次同一个学生。听起来很糟糕。 COUNT中的DISTINCT应该确保每个类只计算一次。