1

snowflake用来尝试基于两列存储行,如果该存储桶大小大于 1,那么我需要一些新列的值为 1,否则我会将其设置为 0。NTILE()除了我需要这是动态的。

我的表如下所示:

ARTICLE_ID      USER_ID     COUNTRY_NAME    NUM_COUNTRIES   NUM_AUTHORS
------------------------------------------------------------------------
30522143        ecf330d     Singapore       1               4
30522143        86b0faa     Singapore       1               4
30522143        d331b33     Singapore       1               4
30522143        d331b33     Singapore       1               4
------------------------------------------------------------------------
30522139        1d08cfd     United States   2               3
30522139        ec9c065     Canada          2               3
30522139        a750bff     United States   2               3
------------------------------------------------------------------------
23410385        1d08cfd     United States   3               3
23410385        ec9c065     Mexico          3               3
23410385        a41b19c     France          3               3
------------------------------------------------------------------------
30285132        d331b33     Chile           2               4
30285132        1d08cf2     Peru            2               4
30285132        a750bff     Chile           2               4
30285132        d742bb5     Peru            2               4
------------------------------------------------------------------------
...

ARTICLE_ID那时我需要存储的两列是COUNTRY_NAME. 查看上表,如果我们取ARTICLE_ID 30522143,我们将有1bucket of,4 USER_ID因为它们都是,Singapore那么 valueHAS_REPEATED_COUNTRY将是 1。

在这种情况下,ARTICLE_ID 30522139我们将有两个子存储桶,一个用于United States包含2 USER_IDs,另一个子存储桶(Canada)包含1 USER_ID这将导致所有与关联的用户United States具有值,1并且与关联的唯一成员Canada具有值0in HAS_REPEATED_COUNTRY

因此该表将类似于:

ARTICLE_ID      USER_ID     COUNTRY_NAME    NUM_COUNTRIES   NUM_AUTHORS     HAS_REPEATED_COUNTRY
------------------------------------------------------------------------------------------------
30522143        ecf330d     Singapore       1               4               1
30522143        86b0faa     Singapore       1               4               1
30522143        d331b33     Singapore       1               4               1
30522143        d331b33     Singapore       1               4               1
------------------------------------------------------------------------------------------------
30522139        1d08cfd     United States   2               3               1
30522139        ec9c065     Canada          2               3               0
30522139        a750bff     United States   2               3               1
------------------------------------------------------------------------------------------------
23410385        1d08cfd     United States   3               3               0
23410385        ec9c065     Mexico          3               3               0
23410385        a41b19c     France          3               3               0
------------------------------------------------------------------------------------------------
30285132        d331b33     Chile           2               4               1
30285132        1d08cf2     Peru            2               4               1
30285132        a750bff     Chile           2               4               1
30285132        d742bb5     Peru            2               4               1
------------------------------------------------------------------------------------------------
...

有没有办法从前者产生后者的表?

4

1 回答 1

3

您似乎想标记给定文章多次出现的国家/地区。如果是这样,您可以只使用窗口计数:

select 
    t.*,
    case when count(*) over(partition by article_id, country_name) > 1
        then 1 else 0
    end as has_repeated_country
from mytable t
于 2020-08-31T21:28:24.217 回答