我有一个包含2个字段的表。 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();
}
答案 0 :(得分:1)
您应该将每个组的COUNT(*)
除以表中的记录总数。对于后一个数量,您可以使用以下子查询:
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();
}
答案 1 :(得分:0)
试试这个,
$query = $this->db->select('browser, (count(*) / <total_rec_count>) *100 as data_percentage')
->from('tb_browser')
->group_by('browser')
->get();
return $query->result_array();
答案 2 :(得分:0)
需要获得实际总数才能进行计算
$query = $this->db->select('browser, (count(*) / (select count(*) from tb_browser)) *100 as data_percentage')
我在mysql上有点生疏,并且没有一个方便的实例......不幸的是mysql不支持OVER()