sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Räknare inom grupp

Användardefinierade variabler blir praktiska när du löser detta problem. Detta borde fungera:

select g, x, counter from (
    select g, x,
        @counter := if (g = @prev_g, @counter + 1, 1) counter,
        @prev_g := g
    from tb, (select @counter := 0, @prev_g := null) init
    order by g, x
) s

Om du inte riktigt har något emot den fjärde kolumnen kan du säkert ta bort den yttre markeringen. Det skulle förbättra prestandan mycket.




  1. ClassNotFoundException vid anslutning till Mysql med JDBC

  2. WHERE-sats som använder värden som kan vara NULL

  3. Aggregerad funktion i MySQL - lista (som LISTAGG i Oracle)

  4. Att använda ett SQL-resultat i en foreach loop