【问题标题】:How to get the results of a count distinct combined with a group by in wide format?如何以宽格式获得与 group by 相结合的计数结果?
【发布时间】:2019-01-06 23:05:57
【问题描述】:

假设我有一张表t1,如下所示:

week | id | country
-----+----+--------
1    | 1  | D      
1    | 2  | E      
1    | 3  | E      
2    | 1  | D      
2    | 4  | D      

我的目标是获得一个表格t2,报告每个国家/地区的不同 ID 的数量:

week | distinct_ids_D | distinct_ids_E
-----+----------------+---------------
1    | 1              | 2
2    | 2              | 0

我的想法是做一个普通的group_by

SELECT week, country, COUNT(DISTINCT id) count FROM t1 GROUP BY week, country

但这给了我t2的长格式:

week | country | count
-----+---------+--------
1    | D       | 1      
1    | E       | 2      
2    | D       | 2      
2    | E       | 0      

如何获得宽格式?解决方案应该在 Presto 中。

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    您不需要在GROUP BY 子句中包含country,因为您想要计数e 国家/地区

    SELECT week, 
           COUNT(DISTINCT id) as distinct_ids_D,
           COUNT(DISTINCT CASE WHEN country = 'E' then country END) as distinct_ids_E
    FROM t1 
    GROUP BY week;
    

    【讨论】:

    • 第二列表达式不应该是SUM(CASE WHEN country = 'D'...吗?
    • @sticky 位:是的。但是,主要问题是SUM(...) 计算了所有article_ids;这不是一个不同的计数。
    • @乔。 . .所以,你想用distinct 算数吗?
    • 是的,正如我帖子的标题和正文所述。
    • @Yogesh:我测试了你的新解决方案,但它不起作用。对于每周,它表示不同 id 的数量为 1。除此之外,正如sticky bit 所指出的,第二列的构建方式应与第三列相同。
    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多