PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQL:Como mesclar duplicatas que não diferenciam maiúsculas de minúsculas


SQL Fiddle

Aqui está sua atualização:
 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;

Aqui está a exclusão para eliminar as linhas duplicadas:
 DELETE FROM stats USING stats s2
 WHERE lower(stats.nick) = lower(s2.nick) AND stats.nick < s2.nick;

(Observe que as sintaxes 'atualizar... de' e 'excluir...usando' são específicas do Postgres e foram roubadas descaradamente de esta resposta e esta resposta .)

Você provavelmente também desejará executar isso para reduzir todos os nomes:
 UPDATE STATS SET nick = lower(nick);

Aaaae jogue um índice exclusivo na versão minúscula de 'nick' (ou adicione uma restrição a essa coluna para não permitir valores não minúsculos):
CREATE UNIQUE INDEX ON stats (LOWER(nick));