sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Få en räknare för varje dubblettvärde

Tyvärr har MySQL inga fönsterfunktioner vilket är vad du behöver. Så du måste använda något sånt här:

Slutlig fråga

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num

se SQL-fiol med demo

Förklaring:

Först, inre markering, detta tillämpar en skenbar row_number till alla poster i din tabell (Se SQL-fiol med demo ):

select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r

Andra delen av frågan, jämför varje rad i din tabell med nästa för att se om den har samma värde, om den inte startar sedan group_row_number över (se SQL-fiol med demo ):

select data,
      @num := if(@data = `data`, @num + 1, 1) as group_row_number,
      @data := `data` as dummy, overall_row_num
from
(
  select data, @rn:[email protected]+1 overall_row_num
  from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num

Det senaste valet returnerar de värden du vill ha och placerar dem i den ordning du begärde:

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num


  1. Effektiv extern tjänstgöring med MySQL och ejabberd

  2. Hur man beräknar procent i PostgreSQL

  3. SQLite VAKUUM

  4. Mysql DISTINCT fungerar inte om jag lägger till en annan kolumn