如何确保在Group BY中仅对特定列计数一次

时间:2017-09-04 09:55:26

标签: mysql

我有下面的MySQL表包含以下数据:

MariaDB [testdb]> select * from courses;
+---------+---------+
| student | class   |
+---------+---------+
| A       | Math    |
| B       | English |
| C       | Math    |
| D       | Biology |
| E       | Math    |
| F       | Math    |
| A       | Math    |
+---------+---------+
7 rows in set (0.00 sec)

现在我有一个简单的案例场景,我希望看到参加特定班级的人数。所以我使用了这个查询,给出了以下结果:

   MariaDB [testdb]> select class, count(class) from courses group by class;
+---------+--------------+
| class   | count(class) |
+---------+--------------+
| Biology |            1 |
| English |            1 |
| Math    |            5 |
+---------+--------------+
3 rows in set (0.01 sec)

但是这里的问题是它正在计算Student ='A'的行,对于class ='Math'两次。

当我们进行计数时,我必须确保每个学生只被考虑一次。

如何修改上述查询以实现此目的?

提前感谢您的任何答案。

2 个答案:

答案 0 :(得分:0)

尝试此查询

SELECT temp.class,count(temp.class) FROM(
select student,class from courses group by student
) AS temp 
GROUP BY `class`;

答案 1 :(得分:0)

您可以使用DISTINCT,例如:

SELECT class, COUNT(DISTINCT(student))
FROM courses
GROUP BY class;

这应该给你去除计数。

或者,您也可以按班级和学生分组,以计算每个学生每班的人数,例如:

SELECT class, student, COUNT(*)
FROM courses
GROUP BY class, student;