【问题标题】:Aggregate rows into one by id - postgres通过 id 将行聚合为一个 - postgres
【发布时间】:2019-09-27 08:37:18
【问题描述】:

例子:

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) 获得此结果?

【问题讨论】:

  • 修复你的数据模型!数字不应该存储为字符串! Postgres 为您提供了许多其他选项,例如 JSON 和数组以及连接表。

标签: sql arrays json postgresql aggregate


【解决方案1】:

有很多方法可以实现您想要的。考虑到您的表具有以下结构..

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}

请注意,函数 unneststring_to_array 的使用取决于您的问题中未提供的 interested_rooms 列的数据类型。但它应该给你一个做什么的方向。祝你好运!

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2017-10-26
    • 2019-02-16
    • 2017-07-08
    • 1970-01-01
    相关资源
    最近更新 更多