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 种聊天类型的用户计数的主要内容,如果未能解决你的问题,请参考以下文章