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

Hvordan håndterer jeg bånd, når jeg rangerer resultater i MySQL?

REDIGER :Dette er MySQL 4.1+ understøttet

Brug:

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

Du kan bruge en cross join (i MySQL, en INNER JOIN uden nogen kriterier) til at erklære og bruge en variabel uden at bruge et separat SET erklæring.

Du har brug for COALESCE for korrekt at håndtere NULL'erne.



  1. Hierarkiske forespørgsler i SQL Server 2005

  2. Sådan fungerer LOG() i MariaDB

  3. MySQL hente array tilføjer duplikerede værdier?

  4. Tilslutning af MySQL med Visual Studio C#