2017-04-18 2 views
1

私は、学生の平均に基づいて学生を配置するクエリを持っています。このmysqlクエリは、クラス全体の位置をクエリするときにうまく機能します。しかし、たとえば、特定の生徒のためのポジションが必要な場合、リスト内に位置していなくても、クエリーはその生徒のポジション1をランク付けします。データベース内の学生マークの位置を正しくリストします

以下は、クラス全体をクエリするときのクエリです。ここでうまくいく。

SELECT (@rownum := @rownum + 1) AS rank, student_id, 
    student_name,term_1_avg 
    FROM `students` a CROSS JOIN 
    (SELECT @rownum := 0) params 
    WHERE class = 2 
    ORDER BY term_1_avg DESC 

しかし、クエリは、この

SELECT (@rownum := @rownum + 1) AS rank, student_id, 
    student_name,term_1_avg 
    FROM `students` a CROSS JOIN 
    (SELECT @rownum := 0) params 
    WHERE class = 2 and student_id=2013494 
    ORDER BY term_1_avg DESC 

のようなものであるときには、その学生が1位でない場合でも、学生番号1をランク付けします。

私は学生に質問するときに、彼/彼女がクラス全体にいる位置を表示するようにクエリを変更する方法を教えてください。

答えて

1

あなたはそれとして、クエリを維持し、サブクエリおそらく

SELECT * FROM 
(SELECT 
    (@rownum := @rownum + 1) AS rank, 
    student_id, 
    student_name, 
    term_1_avg 
FROM `students` a 
CROSS JOIN (SELECT @rownum := 0) params 
WHERE class = 2 
ORDER BY term_1_avg DESC) as sub 
WHERE sub.student_id=2013494 
0

このようにそれを使用する必要がありますので、あなたのランキングは、クエリによって行われます。

Select * 
from (SELECT (@rownum := @rownum + 1) AS rank, student_id, 
     student_name,term_1_avg 
     FROM `students` a CROSS JOIN 
     (SELECT @rownum := 0) params 
     WHERE class = 2 
     ORDER BY term_1_avg DESC) 
where student_id=2013494 
関連する問題