PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQL:Jak scalić duplikaty bez rozróżniania wielkości liter

SQL Fiddle

Oto twoja aktualizacja:

 UPDATE stats
 SET totalgames = x.games, wins = x.wins
 FROM (SELECT LOWER(nick) AS nick, SUM(totalgames) AS games, SUM(wins) AS wins
     FROM stats
      GROUP BY LOWER(nick) ) AS x
 WHERE LOWER(stats.nick) = x.nick;

Oto usuwanie, które usuwa zduplikowane wiersze:

 DELETE FROM stats USING stats s2
 WHERE lower(stats.nick) = lower(s2.nick) AND stats.nick < s2.nick;

(Zauważ, że składnia „update…from” i „delete…using” są specyficzne dla Postgresa i zostały bezwstydnie skradzione z ta odpowiedź i ta odpowiedź .)

Prawdopodobnie będziesz chciał również uruchomić to, aby zmniejszyć wszystkie nazwy:

 UPDATE STATS SET nick = lower(nick);

Aaai wrzuć unikalny indeks dla małej wersji „nick” (lub dodaj ograniczenie do tej kolumny, aby zabronić wartości, które nie są małymi literami):

CREATE UNIQUE INDEX ON stats (LOWER(nick)); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakieś wady używania tekstu typu danych do przechowywania ciągów?

  2. PostgreSQL znajduje wspólną kombinację par w tej samej kolumnie

  3. Liquibase + Postgresql + Spring Jpa :Problem z automatycznym przyrostem identyfikatora

  4. DELETE FROM ... raportowanie błędu składni w miejscu lub w pobliżu .

  5. Jak uzyskać wymiarowość kolumny ARRAY?