Redshift:与其他用户进行两种聊天类型的用户数

时间:2018-08-02 05:53:30

标签: sql postgresql amazon-web-services amazon-redshift

以下是我的数据集的摘要:

enter image description here

  • _id是聊天线程的ID。
  • creatorid是创建聊天线程的用户的ID。
  • partnerid是接收聊天消息的用户的ID。
  • type是聊天类型。

我有兴趣查找与另一用户进行两种(either offer_related or request_related) and direct聊天类型的用户数。

我尝试通过creatorid进行分区,并按照partnerid进行分组,但这还包括其他不希望的情况。

有人知道解决方案吗?我正在使用Amazon Redshift。

“ offer_related”和“ request_related”类型的聊天称为工作聊天。

所以,目标是找到与同一个人进行1个工作聊天和1个直接聊天的人。

例如,

  • 用户A与B有一个offer_related聊天

  • 用户A与B直接聊天

  • 用户B与C直接聊天

  • 用户B与D进行了offer_related聊天。

因此,只有用户A会计入答案,因为他与同一个用户B有1个工作聊天(与offer_related相关)和1个直接聊天。

2 个答案:

答案 0 :(得分:1)

获取所有属于请求类型的聊天,按创建者AND类型分组-然后仅保留具有1种以上聊天类型的聊天,最后计算结果集中的行:

SELECT COUNT(*) FROM 
  (SELECT creatorid FROM chats 
  WHERE type IN ('direct', 'offer_related', 'request_related') 
  GROUP BY creatorid, partnerid, type 
  HAVING COUNT(type) > 1) AS tmp

更新

在分组子句中添加了partnerid

答案 1 :(得分:0)

我相信你想要

SELECT COUNT(*) 
FROM (SELECT creatorid, parnerid, COUNT(*) as num_chats
      FROM chats 
      WHERE type IN ('direct', 'offer_related', 'request_related') 
      GROUP BY creatorid, partnerid 
      HAVING MIN(type) <> MAX(type)  -- check that there is more than 1
     ) cp;