PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL:So führen Sie Duplikate ohne Berücksichtigung der Groß-/Kleinschreibung zusammen

SQL-Fiddle

Hier ist Ihr 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 ist die Löschung, um die doppelten Zeilen wegzublasen:

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

(Beachten Sie, dass die 'update...from'- und 'delete...using'-Syntax Postgres-spezifisch sind und schamlos von diese Antwort und diese Antwort .)

Sie werden wahrscheinlich auch dies ausführen wollen, um alle Namen zu verkleinern:

 UPDATE STATS SET nick = lower(nick);

Uuuund füge einen eindeutigen Index für die Kleinbuchstabenversion von 'nick' hinzu (oder füge dieser Spalte eine Einschränkung hinzu, um Werte zu verbieten, die keine Kleinbuchstaben sind):

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