Mysql

根據學生在 MySQL 中的平均水平對學生進行排名

  • April 2, 2020

我一直在研究並嘗試各種查詢以使其正常工作。我想要發生的是根據他們的平均值對每個學生進行排名,該平均值將使用 AVG(grade) 計算,並將按 student_id 分組。包含必要資訊的表格如下:

assessment_id | student_id | grade | subject_id

查詢後我想看到的是:

student_id | AVG(grade) | rank

我還想使用 PHP 獲得學生的排名,例如 (mysql_query) WHERE student_id = ‘1001’

我最接近的方法是使用下面的查詢:

SELECT student_id, AVG(grade), (@rn := @rn + 1) AS rank 
FROM grades CROSS JOIN (SELECT @rn := 0) CONST 
GROUP BY student_id ORDER BY AVG(grade) DESC

上面查詢的問題在於它根據學生的學生 ID 號對學生進行排名。

我一直在尋找解決方案,但它們似乎並沒有解決我所追求的。我非常感謝您對此的幫助。

我現在無法測試這個,但你可能想要這樣的東西:

SELECT student_id, avg, (@rn := @rn + 1) AS rank 
FROM
(SELECT student_id, AVG(grade) as avg
 FROM grades
 GROUP BY student_id ORDER BY AVG(grade) DESC) agg
CROSS JOIN (SELECT @rn := 0) CONST
ORDER BY avg DESC
SELECT student_id, AVG(grade), RANK() OVER (ORDER BY AVG(grade) DESC) AS rrank
FROM grades
GROUP BY student_id

引用自:https://dba.stackexchange.com/questions/144043