sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL:Hur man slår samman skiftlägesokänsliga dubbletter

SQL Fiddle

Här är din uppdatering:

 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;

Här är borttagningen för att blåsa bort dubblettraderna:

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

(Observera att syntaxen "uppdatering...från" och "ta bort...använder" är Postgres-specifika och stals skamlöst från det här svaret och det här svaret .)

Du kommer förmodligen också att vilja köra detta för att förminska alla namn:

 UPDATE STATS SET nick = lower(nick);

Aaa och släng in ett unikt index på den gemena versionen av "nick" (eller lägg till en begränsning i den kolumnen för att inte tillåta icke-gemener):

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


  1. Prestanda när du använder batchläge för Qt / MySQL

  2. Unix tidsstämpelkonvertering är annorlunda i Mysql och Oracle

  3. Visualisera tipppunkten med Plan Explorer

  4. Hur man använder EXECUTE FORMAT ... ANVÄNDER i postgres-funktionen