PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SQL:Как да обединим дубликати, които не са чувствителни към главни и малки букви

SQL Fiddle

Ето вашата актуализация:

 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;

Ето изтриването за премахване на дублиращите се редове:

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

(Имайте предвид, че синтаксисът „update...from“ и „delete...using“ е специфичен за Postgres и е безсрамно откраднат от този отговор и този отговор .)

Вероятно също ще искате да изпълните това, за да намалите всички имена:

 UPDATE STATS SET nick = lower(nick);

Aaa и добавете уникален индекс към версията с малки букви на 'nick' (или добавете ограничение към тази колона, за да забраните стойности без малки букви):

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG::SyntaxError за rails приложение

  2. Postgres, прости заявки, които не използват индекс

  3. Постоянен UUID в PostgreSQL с помощта на JPA

  4. SQLAlchemy SELECT WITH клауза/изявление (pgsql)

  5. Postgresql:Групиране с ограничение на размера на групата с помощта на прозоречни функции