【问题标题】:Calculate distinct value_1 when value_2, value_3 is equal to certain value当value_2,value_3等于某个值时计算distinct value_1
【发布时间】:2020-06-03 13:22:32
【问题描述】:

输出表如下所示:

table : people
+-------+-----------+-----------+
|   id  |  label    |   action  |
+-------+-----------+-----------+
|   1   |  aaaaa    |       B   |
|   1   |  aaaaa    |       B   |
|   1   |  aaaaa    |       A   |
|   2   |  aaaaa    |       B   |
|   2   |  aaaaa    |       B   |
+-------+-----------+-----------+

我想做的是以这种方式计算唯一 ID:

table : people
+-------+-----------+-------------+-------------+
|   id  |  label    |   action_A  |   action_B  |
+-------+-----------+-------------+-------------+
|   1   |  aaaaa    |       1     |       1     |
|   2   |  aaaaa    |       0     |       1     |
+-------+-----------+-------------+-------------+

【问题讨论】:

  • 即使出现两次,您确定只希望结果中的 action_B 计数一次吗?
  • 是的@ManfredMoser :)

标签: sql count case amazon-athena


【解决方案1】:

只使用条件聚合:

SELECT id, label, 
   coalesce(max(1) filter (WHERE action = 'A'), 0) action_a,
   coalesce(max(1) filter (WHERE action = 'B'), 0) action_b
FROM ...
GROUP BY 1, 2

【讨论】:

    【解决方案2】:

    只使用条件聚合:

    select id, label,
           sum(case when label = 'A' then 1 else 0 end) as a,
           sum(case when label = 'B' then 1 else 0 end) as b
    from t
    group by id, label;
    

    【讨论】:

      【解决方案3】:

      你可以做条件聚合:

      select id, label, 
             count(distinct case when action = 'A' then action end) as action_a,
             count(distinct case when action = 'B' then action end) as action_b
      from t
      group by id, label;
      

      或者你可以使用max()

      select id, label, 
             max(case when action = 'A' then 1 else 0 end) as action_a,
             max(case when action = 'B' then 1 else 0 end) as action_b
      from t
      group by id, label;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 2019-05-18
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多