mysql - 如何计算具有特定值的数据库中的列数(查询)
问题描述
我有一个表 tbl_student 和表年,学生从年表中获取学年。
这里是 tbl_student :
|id_st | student_name | year | status |
--------------------------------------------
| 501 | John Carlton | 1 | 1 |
--------------------------------------------
| 502 | Harold Louis | 2 | 1 |
--------------------------------------------
| 503 | Jackson F | 2 | 0 |
--------------------------------------------
这里是 tbl_year :
|id_year | year_name |
----------------------
| 1 | 2001 |
----------------------
| 2 | 2002 |
----------------------
| 3 | 2003 |
----------------------
我想要的是我可以计算每年活跃学生的数量(列状态值 = 1),我试图用我的查询来计算它,但我得到的是计算每年的学生数量,这是我目前的询问 :
公共函数 getStudentActive(){
$sql = "SELECT b.year_name as year, count(a.status=1) as total from tbl_student as a left join tbl_year as b on b.id_year=a.year GROUP BY a.tbl_year ORDER BY year ASC" ;
return $this->db->query($sql)->result();
}
但结果是查询仍然计算每年的学生总数,我想要的是我可以在学生表的状态列中计算值 1 。
您的帮助对我来说意义重大,谢谢!对不起,如果我的问题写得不整洁,对不起我的英语不好......爱〜约翰哈罗德。
解决方案
您的问题是您正在COUNT
使用布尔表达式:无论表达式是真还是假,a.status=1
它都将始终计数为 1(除非为空)。a.status
而不是COUNT
ing 这些值,SUM
而是:
$sql = "SELECT b.year_name as year, SUM(a.status=1) as total
from tbl_student as a
left join tbl_year as b on b.id_year=a.year
GROUP BY a.tbl_year
ORDER BY year ASC" ;
推荐阅读
- arrays - 有没有更简单的方法在 Go 中解码这个 json?
- javascript - 如何自定义 Bootstrap 4 的 JavaScript 文件
- php - 如何将此 API 日期格式转换为 PHP 日期?
- react-native - Crypto JS 在生产模式下未正确加密
- javascript - 通过 Webpack 缩小保留单个 JavaScript 变量名
- python - 在没有凭据的情况下使用 boto3 (python) 访问 S3?
- c++ - 用抽象类覆盖模板函数
- python - 使用python使用递归打印星号
- firebase - 如何调整已上传到 Firebase 存储的图像大小?
- java - Jackson 3.1.1 缺少列表多态类型的子类型异常的类型 ID?