SQL查询中的数学计算问题


Issue with mathematical calculation inside SQL Query

使用group by查询的列记录总数有问题。我的数据应该显示如下:

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",因为这里出现了一个问题,我如何才能将整个列计数与组按。

$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是呼叫结果列的和。

正确的三种方法来解决这个问题。

  1. 我会先做sum查询,然后将sum添加到百分比计算中。

  2. 可能需要更长的时间来计算-代替18执行子查询以返回总和。

  3. 不要使用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>';

我只是补充说,这就是我要怎么做,似乎ok。