sql >> Base de Datos >  >> RDS >> PostgreSQL

SQL:cómo fusionar duplicados que no distinguen entre mayúsculas y minúsculas

SQL Fiddle

Aquí está su actualización:

 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;

Aquí está la eliminación para borrar las filas duplicadas:

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

(Tenga en cuenta que la sintaxis 'actualizar... de' y 'eliminar... usando' son específicas de Postgres y fueron robadas descaradamente de esta respuesta y esta respuesta .)

Probablemente también desee ejecutar esto para reducir todos los nombres:

 UPDATE STATS SET nick = lower(nick);

Aaa y agregue un índice único en la versión en minúsculas de 'nick' (o agregue una restricción a esa columna para no permitir valores que no sean en minúsculas):

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