mysql - 如何确保特定列在 Group BY 中只计算一次

标签 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)

现在我有一个简单的案例场景,我想查看参加特定类(class)的人数。所以我使用了这个查询,给出了以下结果:

   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)

但这里的问题是,它对 class = 'Math' 的 Student = 'A' 行进行了两次计数。

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

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

预先感谢您的回答。

最佳答案

尝试这个查询

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

关于mysql - 如何确保特定列在 Group BY 中只计算一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46034562/

相关文章:

php - 如何在php中使用准备好的语句从mysql数据库检索数据?

mysql - Jupyter Notebook 不允许我在多行上输入 MySQL 查询

sql - MySQL INSERT - SELECT 语法问题!

mysql - 在 MySQL 中更改表的主键会发生什么?

php - 使用动态字段更新 MySQL

php - 使用动态数据加载和更新动态图表 (chart.js)

mysql - Laravel 架构默认值函数

mysql - MySQL shell 中奇怪的时间戳输出

mysql - 无法弄清楚外键约束语句有什么问题

php - 在 smarty 循环中显示 mysql 查询