2010-12-07 3 views
0

У меня есть следующий запрос:MySQL/PHP SUM данные в массиве

SELECT AVG (q1) AS q1, AVG (q2) AS q2, AVG (q3) AS q3 
FROM thotels_results 
WHERE brand IN ('ABC','EFG','XYZ') 
AND date = 'NOV2010' GROUP BY brand; 

I LOOP через результаты и сбросили из массива с помощью var_dump, выход ниже:

array 
    'q1' => string '8.1724' (length=6) 
    'q2' => string '8.2414' (length=6) 
    'q3' => string '8.2414' (length=6) 

array 
    'q1' => string '8.7714' (length=6) 
    'q2' => string '8.8429' (length=6) 
    'q3' => string '8.1643' (length=6) 

array 
    'q1' => string '8.6009' (length=6) 
    'q2' => string '8.5686' (length=6) 
    'q3' => string '7.8528' (length=6) 

Что бы я хотел сделать, так или иначе, добавьте каждый из q1 вместе и разделите на 3, чтобы дать мне среднее значение, то же самое для q2 и то же самое для q3:

8.1724 + 8.7714 + 8.6009/3 = 8.5149 

Я не уверен, как получить доступ к информации, хранящейся в массиве, - спасибо заранее.

Гомер.

ответ

1

до того цикла запуска

$q1sum=0; 
$q2sum=0; 
$q3sum=0; 
$count=0 

положить это внутри цикла вы пройденной.

$q1sum+=(float) $array['q1'] ; 
$q2sum+=(float) $array['q2'] ; 
$q3sum+=(float) $array['q3'] ; 
$count++; 

положите это из петли после конца петли.

$q1final_result=$q1sum/$count; 
$q2final_result=$q2sum/$count; 
$q3final_result=$q3sum/$count; 
+0

Лучших вещи - работает удовольствие, спасибо! – 2010-12-07 10:02:04

2
$q1Ave = $q2Ave = $q3Ave = 0 
foreach ($results as $qValues) { 
    $q1Ave += $qValues['q1']; 
    $q2Ave += $qValues['q2']; 
    $q3Ave += $qValues['q3']; 
} 
$q1Ave /= count($results); 
$q2Ave /= count($results); 
$q3Ave /= count($results); 
1
$tab = array(
       0 => array ("q1" => 2,"val2" => 5), 
       1 => array ("q1" => 6,"val2" => 10), 
       2 => array ("q1" => 15,"val2" => 50), 
       ); 

echo sum_subarrays_by_key($tab, "q1"); 



function sum_subarrays_by_key($tab, $key) { 

     $sum = 0; 

     foreach($tab as $sub_array) { 
      $sum += $sub_array[$key]; 
     } 

     return $sum; 

    } 

Он будет работать на любой глубине массива. нужно вызвать, изменяя ключ, и хочет, чтобы подвести в вызове функции

2

Вы можете попробовать
SELECT SUM(q1)/3 as q1, SUM(q2)/3 as q2, SUM(q3)/3 as q3
FROM (
SELECT AVG (q1) AS q1, AVG (q2) AS q2, AVG (q3) AS q3
FROM thotels_results
WHERE brand IN ('ABC','EFG','XYZ')
AND date = 'NOV2010' GROUP BY brand ) as derived_table;

+0

Привет, попробовал это, но получив следующую ошибку: # 1248 - Каждая производная таблица должна иметь свой собственный псевдоним – 2010-12-07 09:51:32

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