PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQL :comment fusionner des doublons insensibles à la casse

SQL Fiddle

Voici votre mise à jour :

 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;

Voici la suppression pour supprimer les lignes en double :

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

(Notez que les syntaxes 'update...from' et 'delete...using' sont spécifiques à Postgres et ont été volées sans vergogne à cette réponse et cette réponse .)

Vous voudrez probablement aussi exécuter ceci pour mettre tous les noms en minuscule :

 UPDATE STATS SET nick = lower(nick);

Aaaet ajoutez un index unique sur la version minuscule de 'nick' (ou ajoutez une contrainte à cette colonne pour interdire les valeurs non minuscules) :

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