«объединить» строки, если они дублируются в таблице - SQLite - PullRequest
0 голосов
/ 26 апреля 2019

Таблица следующая:

CREATE TABLE UserLog(uid TEXT, clicks INT, lang TEXT)

Где uid поле должно быть уникальным.

Вот некоторые примеры данных:

|      uid      |  clicks |    lang    |
----------------------------------------
| "898187354"   |    4    |    "ru"    |
| "898187354"   |    4    |    "ru"    |
| "123456789"   |    1    |   <null>   |
| "123456789"   |    10   |    "en"    |
| "140922382"   |    13   |   <null>   |

Как видите, у меня есть несколько строк, в которых поле uid теперь дублируется. Я хотел бы, чтобы эти строки были объединены следующим образом:

clicks поля добавляются, а lang поля обновляются, если их предыдущее значение было null.

Для данных, показанных выше, это будет выглядеть примерно так:

|      uid      |  clicks |    lang   |
---------------------------------------
| "898187354"   |    8    |    "ru"   |
| "123456789"   |    11   |    "en"   |
| "140922382"   |    13   |   <null>  |

Кажется, я могу найти много способов, чтобы просто удалить дубликаты данных, что я не обязательно хочу делать. Я не уверен, как я могу ввести логику в операторы SQL, которая делает это.

1 Ответ

1 голос
/ 27 апреля 2019

Первое обновление:

update userlog
set 
  clicks = (select sum(u.clicks) from userlog u where u.uid = userlog.uid),
  lang = (select max(u.lang) from userlog u where u.uid = userlog.uid)
where not exists (
  select 1 from userlog u
  where u.uid = userlog.uid and u.rowid < userlog.rowid
);

, а затем удалить ненужные повторяющиеся строки:

delete from userlog
where exists (
  select 1 from userlog u
  where u.uid = userlog.uid and u.rowid < userlog.rowid
);
...