2016-10-17 3 views
0

Ошибка с общим количеством записей столбцов с группой по запросу. мои данные должны быть показаны как:Проблема с математическим вычислением внутри SQL-запроса

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

Это он MySQL ** или ** SQL Server? Пожалуйста, будьте осторожны с вашими тегами. – DavidG

+0

mysqli_query - MySQL –

+0

Это Mysql. Я удалил тег сервера sql. –

ответ

1

Право 3 способа обойти эту проблему.

  1. Сначала я сделал бы запрос суммы, а затем просто добавлю сумму в процентное значение calc.

  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>'; 

Я просто добавлю, что так я сделал бы это, кажется, хорошо. Я думаю, тест и посмотреть.

+0

Это не сработает. –

+1

Почему? Сначала подсчитайте сумму строк, а затем подключите их. Почему бы не работать? –

+0

Как я могу получить доступ к сумме суммы столбца внутри одного и того же запроса. Это вызовет ошибку. –

Смежные вопросы