寻找中位数Mysql

时间:2013-07-16 19:12:42

标签: php mysql math mode median

尝试在MYSQL数据库中查找数组的中位数。

目前,我正在抓住我的数据:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);

然后我将它放入一个像这样的数组中。

$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
$names[] = $row['Day'];

然后我试图找到该数组的中位数:

            sort($names);
            $count = count($names);
            $middleval = floor(($count-1)/2); 
                if($count % 2) { 
                    $median = $names[$middleval];
                } else { 
                    $low = $names[$middleval];
                    $high = $names[$middleval+1];
                    $median = (($low+$high)/2);
                }

        return $median;

        }

        var_dump($names);

我没有收到任何错误,但它会导致我的应用程序崩溃。

有关我做错的任何建议吗?

1 个答案:

答案 0 :(得分:1)

  

你在第三个代码块之前用你的第二个代码黑色关闭了吗?

回答:

  

我在最后一次关闭}

失败...在第二个代码块中关闭,然后在第三个代码块中运行代码...这将只找到一次中位数,而不是每次从mysql返回的行设置名称时都试图找到中位数。第一次,名字的数量将是1,然后你减去1 = 0并除以2。这将给你0.然后你尝试得到0和2的余数。这会抛弃你的其余代码。试试这个:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);
$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
    $names[] = $row['Day'];
}
sort($names);
$count = count($names);
$middleval = floor(($count-1)/2); 
if($count % 2) { 
    $median = $names[$middleval];
} else { 
    $low = $names[$middleval];
    $high = $names[$middleval+1];
    $median = (($low+$high)/2);
}
echo $median;
var_dump($names);

//previous code
//if this code is inside function then return if not then print
//return $median;
//if this code is inside function then the return above will cancel this var_dump
//var_dump($names);

还请记住

  

警告!   自PHP 5.5.0起,此扩展已弃用,将来将被删除。相反,应使用MySQLiPDO_MySQL扩展名。有关详细信息,另请参阅MySQL: choosing an API指南和related FAQ

相关问题