Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Uzyskaj licznik dla każdej zduplikowanej wartości

Niestety, MySQL nie posiada funkcji okienkowych, których będziesz potrzebować. Więc będziesz musiał użyć czegoś takiego:

Ostateczne zapytanie

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

zobacz SQL Fiddle z wersją demonstracyjną

Wyjaśnienie:

Po pierwsze, wewnętrzne zaznaczenie, stosuje udany row_number do wszystkich rekordów w Twojej tabeli (Zobacz SQL Fiddle z wersją demonstracyjną ):

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

Druga część zapytania, porównuje każdy wiersz w Twojej tabeli z następnym, aby sprawdzić, czy ma on tę samą wartość, jeśli nie, to rozpoczyna group_row_number over (patrz SQL Fiddle z wersją demonstracyjną ):

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

Ostatni wybór zwraca żądane wartości i umieszcza je z powrotem w żądanej kolejności:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to znaczy, gdy mówię, że instrukcja „Przygotowana” jest wstępnie skompilowana?

  2. MySQL sprawdza, czy tabela istnieje bez zgłaszania wyjątku

  3. Mysql CASE WHEN JOIN Błąd instrukcji

  4. Nazwa tabeli rozróżniania wielkości liter MySQL w systemie MacOS z systemem plików bez rozróżniania wielkości liter

  5. Jak uzyskać dostęp do PhpMyAdmin bez logowania cPanel?