COUNT使用两个(或更多)列

时间:2012-04-30 14:50:46

标签: mysql sql count

是否可以根据两列的组合执行计数?

我有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_idclass_id组合的实例数吗?

我还是MySQL的新手,所以如果这对每个人来说都是基本的,我会道歉

2 个答案:

答案 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应该确保每个类只计算一次。

相关问题