BEARBEITEN :Dies wird von MySQL 4.1+ unterstützt
Verwendung:
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
Sie können einen Cross Join (in MySQL ein INNER JOIN ohne Kriterien) verwenden, um eine Variable zu deklarieren und zu verwenden, ohne ein separates SET
zu verwenden Aussage.
Sie brauchen das COALESCE, um die NULLen richtig zu handhaben.