sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo manejo los empates al clasificar los resultados en MySQL?

EDITAR :Esto es compatible con 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

Puede usar una unión cruzada (en MySQL, una UNIÓN INTERNA sin ningún criterio) para declarar y usar una variable sin usar un SET separado declaración.

Necesita COALESCE para manejar correctamente los NULL.