我有以下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>';
}
答案 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%。