Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como lidar com empates ao classificar resultados no MySQL?


EDITAR :Este é suportado pelo MySQL 4.1+

Usar:
   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

Você pode usar uma junção cruzada (no MySQL, um INNER JOIN sem nenhum critério) para declarar e usar uma variável sem usar um SET separado demonstração.

Você precisa do COALESCE para lidar adequadamente com os NULLs.