0

我有以下 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>';
    }
4

1 回答 1

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

于 2013-07-25T14:16:01.017 回答