Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie gehe ich mit Gleichständen um, wenn ich Ergebnisse in MySQL ranke?

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.