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


How to find Average from mysql table in php?

我需要计算评级表中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; 
    }       
}

使用数据库进行此工作:

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"。

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

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