首页 > 解决方案 > 如何计算具有特定值的数据库中的列数(查询)

问题描述

我有一个表 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 。

您的帮助对我来说意义重大,谢谢!对不起,如果我的问题写得不整洁,对不起我的英语不好......爱〜约翰哈罗德。

标签: mysqlsqlcodeigniterchart.js

解决方案


您的问题是您正在COUNT使用布尔表达式:无论表达式是真还是假,a.status=1它都将始终计数为 1(除非为空)。a.status而不是COUNTing 这些值,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" ;

推荐阅读