sql >> Databáze >  >> RDS >> Mysql

Jak provádět seskupené hodnocení v MySQL

SELECT id_student, id_class, grade,
   @student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
   @class:=id_class AS clset
FROM
  (SELECT @student:= -1) s,
  (SELECT @class:= -1) c,
  (SELECT *
   FROM mytable
   ORDER BY id_class, id_student
  ) t

Funguje to velmi jednoduchým způsobem:

  1. Počáteční dotaz je uspořádán podle id_class nejprve id_student za druhé.
  2. @student a @class jsou inicializovány na -1
  3. @class se používá k testování, zda je zadána další sada. Pokud je předchozí hodnota id_class (který je uložen v @class ) se nerovná aktuální hodnotě (která je uložena v id_class ), @student je vynulován. V opačném případě se hodnota zvýší.
  4. @class je přiřazena nová hodnota id_class a bude použit v testu v kroku 3 na dalším řádku.


  1. PostgreSQL - CHYBA:Datum sloupce nelze přetypovat na typ datum

  2. Jak vybrat každý řádek, kde hodnota sloupce NENÍ odlišná

  3. Jak provést aktualizaci + připojit se k PostgreSQL?

  4. Jak přidat zdroj dat PostgreSQL do WildFly 9.0?