我有下面的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'两次。
当我们进行计数时,我必须确保每个学生只被考虑一次。
如何修改上述查询以实现此目的?
提前感谢您的任何答案。
答案 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;