如何从php中的mysql表中找到Average?

时间:2015-03-22 16:40:53

标签: php mysql

我需要计算评级表中r1-r25列的平均值。在值99表示的列中将显示空值。如何以有效的方式找到25列的平均值? 我用于单个列的示例代码如下,

示例PHP代码

$s=0;
$n=0; 
$res = mysql_query("SELECT * FROM ratings");  

while($arr=mysql_fetch_array($res)){    
    $rat=$arr['r1'];
    if($rat != 99)
    {
        $s=$rat+$s;
        $n=$n+1;
        $avg=$s/$n; 
    }       
}

2 个答案:

答案 0 :(得分:1)

使用数据库完成这项工作:

SELECT AVG(case when r1 <> 99 then r1 end) as r1_avg,
       AVG(case when r2 <> 99 then r2 end) as r2_avg,
       . . .
       AVG(case when r25 <> 99 then r25 end) as r25_avg     
FROM ratings;

这样会更快,因为您不必将所有数据都带到应用程序进行顺序处理。

确实需要更多输入(或使用电子表格来生成代码)。这是因为您将数据存储在列中,当数据实际上应该在不同的行中时 - 每行任意一行和评级(可能是评级号)。使用该数据结构,查询将更短且性能更好。

此外,SQL有一个很好的存储NULL值的机制,你应该使用它。它被称为NULL,而不是“99”。

答案 1 :(得分:0)

$res = mysql_query("SELECT * FROM ratings WHERE `r1` NOT IN ( 99 )");

现在,您不需要if检查您的while循环。