sql - 通过 id 将行聚合为一个 - postgres
问题描述
例子:
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
) 获得此结果?
解决方案
有很多方法可以实现您想要的。考虑到您的表具有以下结构..
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
您的问题中未提供的列的数据类型。但它应该给你一个做什么的方向。祝你好运!
推荐阅读
- sql - CONCAT后如何在重复行号上拆分字符串
- git - Github“嵌套”存储库,但不是子模块
- android - 如何制作这个 OTPView ?我想通过布局按钮而不是 Xamain.Android 中的软键盘提供输入
- postgresql - PostgreSQL 拒绝连接
- javascript - Google 应用程序脚本 - 内置依赖项验证
- powershell - $obj.psObject.properties[$key].value 可以缩写吗
- ruby-on-rails - NameError:未初始化的常量应该
- javascript - 获取最高属性的ID
- asp.net-mvc - 如何在 MVC 中从数据库中填充 DropDownList
- c - 我想将变量类型放在字符串中的某个位置