如何在MySql语句中获取方程的累积总和

时间:2013-07-25 09:47:00

标签: php mysql

我有以下MySql语句,我无法在我的while循环中获得'排名'的累计总数

SELECT *,
    q1 + ((q1 + q2 + q3 + q4 + q5 + q6) / 6)
    AS ranking
    / SUM(ranking)
    FROM table
    WHERE field = :field
    GROUP by id

我的查询的这一部分完美无缺:

q1 + ((q1 + q2 + q3 + q4 + q5 + q6) / 6)
    AS ranking

我需要将“AS排名”值除以查询输出中每个“排名”行的总和,并将其返回到我的while循环中的$ rankingPercentage变量中。

q1 q2 q3 q4 q5 q6是一个表中的所有字段,包含0到100之间的数字值(VARCHAR)

我希望返回$ rankingPercentage的输出,即“排名”(我的等式“AS排名”)除以SQL查询中返回的所有“排名”行的总和。

我的While循环如下:

 while($row = $sqlprep->fetch(PDO::FETCH_OBJ)){

        $ranking = $row->ranking;

        echo '<tr valign="bottom"><td>' . $row->id . '</td>';
        echo '<td>' . $row->uid . '</td>';
        echo '<td>' . $row->q1 . '</td>';
        echo '<td>' . $row->q2 . '</td>';
        echo '<td>' . $row->q3 . '</td>';
        echo '<td>' . $row->q4 . '</td>';
        echo '<td>' . $row->q5 . '</td>';
        echo '<td>' . $row->q6 . '</td>';
        echo '<td>' . $row->q9 . '</td>';
        echo '<td class="capitalise">' .  $ranking. '</td>';
        echo '<td class="capitalise">' .  $rankingPercentage . '</td>';
        echo '</tr>';
    }

1 个答案:

答案 0 :(得分:1)

据我了解,你有一个公式来为每行分配一个分数,然后你需要看到这一行所有行的总分的哪一部分。

子选择将解决这个问题,尽管连接可能会更有效。

SELECT
    *,
    <formula> AS ranking
    <formula> / (
        SELECT SUM(<formula>) 
        FROM table
        WHERE field = :field
    ) AS rankingPercentage
FROM table
WHERE field = :field
GROUP BY id

这将告诉您每行拥有的整个部分,它不会告诉您给定的行位于前X%。