sql >> Database >  >> RDS >> PostgreSQL

SQL:hoofdletterongevoelige duplicaten samenvoegen

SQL Fiddle

Hier is je update:

 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;

Hier is de verwijdering om de dubbele rijen weg te blazen:

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

(Merk op dat de syntaxis 'update...from' en 'delete...using' Postgres-specifiek zijn en schaamteloos zijn gestolen van dit antwoord en dit antwoord .)

U wilt dit waarschijnlijk ook uitvoeren om alle namen te verkleinen:

 UPDATE STATS SET nick = lower(nick);

Aaaan en gooi een unieke index in de kleine versie van 'nick' (of voeg een beperking toe aan die kolom om niet-kleine letters niet toe te staan):

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


  1. Hoe krijg ik de eerste en laatste dag van de week in Oracle?

  2. HikariCP te veel verbindingen

  3. mysql-query met random en desc

  4. Voorwaardelijke logica in PostDeployment.sql-script met SQLCMD