2014-12-06 4 views
-1

Я использую DW для создания набора записей, который вычисляет процент из таблицы, сгруппированной по имени больницы. Мне нужно получить среднее значение процента (путем суммирования процента, деленного на количество больниц). У меня есть только одна таблица.Среднее вычисление от процента

mysql_select_db($database_localapconnect, $localapconnect); 
$query_Recordset1 = "SELECT COUNT(IF(ap_intervalname = 'Less than or equal to 12 hours', ap_intervalname, NULL))/ COUNT(ap_intervalname) *100 AS 'percent' FROM maintble GROUP BY `hospitalname`"; 
$Recordset1 = mysql_query($query_Recordset1, $localapconnect) or die(mysql_error()); 

$totalRows_Recordset1 = mysql_num_rows($Recordset1); 

while($row_Recordset1 = mysql_fetch_array($Recordset1)) { 
print_r($row_Recordset1['percent'].'<br>');  
} 

print_r ($totalRows_Recordset1).'<br>' ; 


echo sum($row_Recordset1['percent'])/$totalRows_Recordset1; 

результат:

83.0189 
98.0000 
86.2745 
68.0365 
94.9686 
78.4314 

6 

Я получаю следующее сообщение об ошибке:

Fatal error: Call to undefined function sum() in C:\wamp\www\ap_database\Untitled-1.php on line 49

+0

http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Strawberry

+0

Я думаю, что вы используете SQL и PHP, как если бы они были взаимозаменяемыми. Это не разные языки. –

+0

Вы можете взглянуть на функцию массива array_sum() – Strawberry

ответ

0

Самый простой способ заключается в использовании подзапроса:

SELECT avg(percent) 
FROM (SELECT AVG(CASE WHEN ap_intervalname = 'Less than or equal to 12 hours' THEN 100.0 
         ELSE 0 END) AS percent 
     FROM maintble 
     GROUP BY `hospitalname` 
    ) m; 
1

Функция сумма делать esn't не существует в PHP. Если вы хотите, чтобы сумма элементов массива, вы должны использовать array_sum

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

Например, так:

$totalRows_Recordset1 = mysql_num_rows($Recordset1); 
$sum = 0.0; 
while($row_Recordset1 = mysql_fetch_array($Recordset1)) { 
    print_r($row_Recordset1['percent'].'<br>');  
    $sum += $row_Recordset1['percent']; 
} 


print_r ($totalRows_Recordset1).'<br>' ; 

echo $sum/$totalRows_Recordset1; 
0

Вы звоните sum() в этой строке кода PHP.

sum($row_Recordset1['percent'])/$totalRows_Recordset1; /* mistake */ 

Но это не имеет смысла. Во-первых, $row_Recordset1['percent'] - просто обычное старое число. С другой стороны, php не имеет встроенной функции sum().

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

$sum = 0.0; 
$count = 0; 
while($row_Recordset1 = mysql_fetch_array($Recordset1)) { 
    $count ++; 
    $sum += $row_Recordset1['percent']; 
    print_r($row_Recordset1['percent'].'<br>');  
} 
echo $sum/$count; 

Обратите внимание, я насчитал строк явно, а не полагаться на num_rows(). Это по уважительной причине; при некоторых обстоятельствах num_rows() не является надежным, прежде чем вы прочтете набор записей.

+0

Спасибо за ответ эксперта, но это не приводит к среднему проценту. Я прибегал к жесткому кодированию суммы знаменателя, так как он имеет более или менее фиксированное число. SELECT CONCAT (FORMAT (сумма (vt)/6,1), '%') AS 'National Average' FROM (выберите счетчик ('имя_файла') в качестве cnt, COUNT (IF (ap_intervalname = 'Меньше или равно 12 часам", ap_intervalname, NULL))/COUNT (ap_intervalname) * 100 as vt from maintble ГДЕ «выгружено» МЕЖДУ холоданием и холодом GROUP по 'hospitalname') a; –

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