Mysql
 sql >> Database >  >> RDS >> Mysql

Come gestisco i legami durante la classifica dei risultati in MySQL?

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.