如何在 mysql codeigniter 上取得百分比

How to make a percentage on mysql codeigniter

我有一个包含 2 个字段的 table。 Id_user第一个字段和第二个字段类型的浏览器,我试图让用户总数的百分比成为最喜欢浏览器的用户。在我尝试让她的查询结果与她的某个百分比不匹配后,怎么了?

|id_user|   name_item
--------------------------
|   1   |   safari      |
|   2   |   firefox     |
|   3   |   opera mini  |
|   4   |   safari      |
|   5   |   chrome      |   
|   6   |   firefox     |
|   7   |   chrome      |
|   8   |   chrome      |   
|   9   |   firefox     |
|   10  |   firefox     |       
|   11  |   safari      |
|   12  |   opera mini  |   

这是预期的

|   safari      |   25% |
|   opera mini  |   17% |
|   firefox     |   33% |
|   chrome      |   25% |

控制器

public get_json() {
    $browser = $this->My_model->get_browser();
    foreach($browser as $row)
    {   
        $data['browser'] []= $row['browser'];
        $data['percentage'] []= $row['data_percentage'];
    }       
        header('content-type: application/json');   
        echo json_encode($data);  
}   

型号

function get_browser() {
    $query = $this->db->select('browser, 100 / count(*) as data_percentage')
                      ->from('tb_browser')
                      ->group_by('browser')
                      ->get();      
    return $query->result_array();  
}   

试试这个,

$query = $this->db->select('browser, (count(*) / <total_rec_count>) *100 as data_percentage')
                  ->from('tb_browser')
                  ->group_by('browser')
                  ->get();      
return $query->result_array(); 

您应该将每个组的 COUNT(*) 除以 table 中的记录总数。对于后一个数量,您可以使用以下子查询:

SELECT COUNT(*) FROM tb_browser

完整代码如下:

function detail_metagenome_microbe_grafik($trflp_code, $metacode) {
    $total = '(select count(*) from tb_browser)';
    $query = $this->db->select('concat(round((100*count(*))/'.$total.',0),"%") as data_percentage')
                  ->from('tb_browser')
                  ->group_by('browser')
                  ->get();      
    return $query->result_array();  
}

需要得到实际总数才能进行计算

$query = $this->db->select('browser, (count(*) / (select count(*) from tb_browser)) *100 as data_percentage')

我对 mysql 有点生疏,手边没有实例...不幸的是 mysql 不支持 OVER()