MODIFICA :Questo è MySQL 4.1+ supportato
Usa:
SELECT st.name,
sc.grades,
CASE
WHEN @grade = COALESCE(sc.grades, 0) THEN @rownum
ELSE @rownum := @rownum + 1
END AS rank,
@grade := COALESCE(sc.grades, 0)
FROM STUDENTS st
LEFT JOIN SCORES sc ON sc.student_id = st.id
JOIN (SELECT @rownum := 0, @grade := NULL) r
ORDER BY sc.grades DESC
Puoi utilizzare un cross join (in MySQL, un INNER JOIN senza alcun criterio) per dichiarare e utilizzare una variabile senza utilizzare un SET
separato dichiarazione.
Hai bisogno di COALESCE per gestire correttamente i NULL.