【问题标题】:Redshift query to identify users belonging to specific groupsRedshift 查询以识别属于特定组的用户
【发布时间】:2018-11-29 07:52:38
【问题描述】:

我有一个红移表 (user_group),看起来像

user_id | group_id
--------+---------
1       | 1
1       | 2
2       | 1
2       | 3
3       | 2
3       | 3
4       | 4

编写返回属于任意组子集 (group_id) 的所有用户 (user_id) 的查询的最佳方法是什么?

现在,我被黑的查询如下,我只是根据需要添加/删除WHERE 过滤器:

SELECT DISTINCT user_id
FROM
    user_group
WHERE
    user_id IN (SELECT DISTINCT user_id FROM user_group WHERE group_id = 1)
    AND user_id IN (SELECT DISTINCT user_id FROM user_group WHERE group_id = 5)
    ...

而且,感觉应该有更好的方法?

【问题讨论】:

  • 你想看到什么输出?
  • 我的退货集中只需要user_id。我想过滤整个数据集,只针对我目前正在过滤的所有group_ids 中的用户。例如,在我列出的同一个查询中,我正在查找 both group_id 1 和 group_id 5 中的所有 user_ids。这有帮助吗?

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


【解决方案1】:

使用GROUP BYHAVING

SELECT user_id
FROM user_group
WHERE group_id IN (1, 5)
GROUP BY user_id
HAVING COUNT(*) = 2;  -- number of groups in the `IN` list

【讨论】:

  • 哦,我比我的回答更喜欢这个!
【解决方案2】:

属于 ANY 列出组的用户:

SELECT DISTINCT
  user_id
FROM user_group
WHERE group_id in (1, 5)

属于 ALL 列出组的用户:

SELECT
  user_id
FROM user_group
GROUP BY user_id
HAVING SUM(CASE WHEN group_id = 1 THEN 1 END) > 0
   AND SUM(CASE WHEN group_id = 2 THEN 1 END) > 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多