我需要计算评级表中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;
}
}
答案 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循环。