Redshift:与其他用户打开 2 种聊天类型的用户计数

Posted

技术标签:

【中文标题】Redshift:与其他用户打开 2 种聊天类型的用户计数【英文标题】:Redshift: Count of users who have 2 types of chats open with other users 【发布时间】:2018-08-02 05:53:29 【问题描述】:

以下是我的数据集的一个 sn-p:

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

我有兴趣查找与另一个用户有 2 种 (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 次直接聊天。

【问题讨论】:

鉴于您已经显示的示例输入,您能否编辑您的答案以显示您所需输出的示例? 你好@JohnRotenstein。我编辑了问题以包含一个实例。我希望这能让空气稍微好一点:) 谢谢。 不,请根据您提供的屏幕截图中的一些行,添加您希望从查询中获得的示例输出。这将使我们能够重新创建您的数据并尝试设计查询。 【参考方案1】:

获取所有请求类型的聊天,按创建者和类型分组 - 然后仅保留具有超过 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 种聊天类型的人。但是,它不会检查它们是否与同一用户在一起。我在问题中提到了一个例子来更好地解释这个问题。 在分组中添加partnerid是否有效? :) 感谢您的帮助【参考方案2】:

我相信你想要:

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;

【讨论】:

以上是关于Redshift:与其他用户打开 2 种聊天类型的用户计数的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中与其他用户共享对象

是否可以与其他用户共享计算实例?

获取 quickblox 聊天中的用户列表

在核心数据中保存和加载 xmpp 消息

如何显示所有用户的最后一条消息?

将数据从 FireBase 检索到颤振项目时出错