按查询分组列记录总数存在问题。我的数据应该显示为:
Call Status Call Results Percentage
Answering Machine 1 5.6%
DO NOT CALL 9 50.0%
Good Transfer 4 22.2%
Looking for Information 4 22.2%
(blank) 0.0%
Total Calls 18
我正在使用以下查询来完成我的工作。但是我正在服用硬核" 18"因为问题发生在这里,我怎么能用group by来计算整列数。
$result = mysqli_query($link, "SELECT vs.status_name,vl.call_date,SUM(vl.called_count) as Total,SUM(vl.called_count)/18*100 as percentage from vl_users vu,".$vicidial_log_table." vl,vicidial_list vi,vicidial_statuses vs where vl.call_date >= '2014-01-17 00:00:00' and vl.call_date <= '2016-10-17 23:59:59' group by vs.status_name limit 100000") or die(mysqli_error($link));
上面的数字18是调用结果列的总和。任何人都可以帮助我。
答案 0 :(得分:1)
解决这个问题的正确方法。
我会先进行总和查询,然后将总和加到百分比计算中。
可能需要更长的时间来计算 - 代替18做一个子查询来返回总和。
不要使用mysql来计算百分比。而是使用php对数组求和,然后在显示时计算每行中的百分比。
1 - 将是我的推荐。
编辑 好的,鉴于查询的复杂性,似乎答案是3。 那怎么做。
$result = mysqli_query($link, "SELECT vs.status_name,vl.call_date,SUM(vl.called_count) as Total from vl_users vu,".$vicidial_log_table." vl,vicidial_list vi,vicidial_statuses vs where vl.call_date >= '2014-01-17 00:00:00' and vl.call_date <= '2016-10-17 23:59:59' group by vs.status_name limit 100000") or die(mysqli_error($link));
$all_results = mysqli_fetch_all($result);
//might be a quicker way but
$sum = 0;
foreach($all_results as $s) {
$sum = $sum + $s['Total'];
}
//now to print
echo '<table><tr> <td>Call Status</td><td>Call Results</td><td>Percentage</td></tr>';
foreach($all_results as $row) {
echo '<tr>';
echo '<td>'.$row['status_name'].'</td>';
echo '<td>'.$row['Total'].'</td>';
$percentage = 0;
if($sum > 0 && $row['Total'] > 0){
$percentage = ($row['Total']/$sum)*100;
}
echo '<td>'.$percentage.'%</td>';
echo '</tr>';
}
echo '</table>';
我只是补充一点,我就是这样做的,似乎没问题。我想测试一下。