PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQL:come unire duplicati senza distinzione tra maiuscole e minuscole

SQL Fiddle

Ecco il tuo aggiornamento:

 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;

Ecco l'eliminazione per spazzare via le righe duplicate:

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

(Nota che la sintassi 'aggiorna...da' ed 'elimina...usando' sono specifiche di Postgres e sono state rubate spudoratamente da questa risposta e questa risposta .)

Probabilmente vorrai anche eseguire questo per minimizzare tutti i nomi:

 UPDATE STATS SET nick = lower(nick);

Aaa e inserisci un indice univoco sulla versione minuscola di 'nick' (o aggiungi un vincolo a quella colonna per non consentire i valori non minuscoli):

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