sql >> Database >  >> RDS >> Mysql

MySQL - Krijg een teller voor elke dubbele waarde

Helaas heeft MySQL geen vensterfuncties en dat heb je nodig. Je zult dus zoiets als dit moeten gebruiken:

Laatste zoekopdracht

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

zie SQL Fiddle met demo

Uitleg:

Ten eerste, inner select, dit past een nep row_number toe naar alle records in uw tabel (zie SQL Fiddle met demo ):

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

Tweede deel van de query, vergelijkt elke rij in uw tabel met de volgende om te zien of deze dezelfde waarde heeft, zo niet, dan start het group_row_number over (zie SQL Fiddle met 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

De laatste selectie, retourneert de gewenste waarden en plaatst ze terug in de door u gevraagde volgorde:

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. De evolutie en toekomst van Microsoft Access

  2. Hoe SQL Server op Red Hat 8 te installeren

  3. Waarschuwing:mysqli_stmt::bind_param():het aantal variabelen komt niet overeen met het aantal parameters in de voorbereide instructie

  4. MYSQL-installatieproblemen