Объединять строки в один по id - postgres - PullRequest
1 голос
/ 27 сентября 2019

Пример:

user_id activity_type interested_rooms
1       views         1,2
1       application   1
1       search        3,2

Я хотел бы получить результат:

user_id interested_rooms  
1       "1","2","3"

Тогда я хотел бы найти всех пользователей, которые, например, заинтересованы в 1 комнате

SELECT user_id
FROM blabla
WHERE interested_rooms IN "1"

Как получить этот результат с помощью SQL (postgreSQL)?

1 Ответ

1 голос
/ 27 сентября 2019

Есть много способов достичь того, что вы хотите.Учитывая, что ваша таблица имеет следующую структуру ..

CREATE TABLE blabla (user_id INT,activity_type VARCHAR,interested_rooms VARCHAR);
INSERT INTO blabla VALUES (1,'views','1,2'),
                          (1,'application','1'),
                          (1,'search','3,2'); 

.. вы можете попробовать CTE ..

WITH j AS (
  SELECT DISTINCT user_id, unnest(string_to_array(interested_rooms,',')) AS rooms
  FROM blabla ORDER BY rooms
)
SELECT user_id, array_agg(rooms) AS interested_rooms
FROM j GROUP BY user_id

.., который вернетжелаемый результат

 user_id | interested_rooms 
---------+------------------
       1 | {1,2,3}

Обратите внимание, что использование функций unnest и string_to_array будет зависеть от типа данных столбца interested_rooms который не был указан в вашем вопросе.Но это должно дать вам представление о том, что делать.Удачи!

...