以下是我的数据集的摘要:
_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个直接聊天。
答案 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;