【问题标题】:How to count duplicates based on group by as well as see if values are present in the same field values?如何根据分组计算重复项以及查看值是否存在于相同的字段值中?
【发布时间】:2021-03-17 22:19:06
【问题描述】:

我有一个包含大约 10 万行的表,看起来像这样

GROUP  |  ID  

A        AED12
A        6D04K
A        AED12 
B        VFR54
B        VFR54
B        9KMN2
B        AED12 
C        9KMN2
C        9KMN2
C        VFR54

我想要一个输出来计算按“GROUP”分组的重复项的数量,同时还可以查看多个组中存在哪些“ID”(参考 GROUP A 和 B 中的“AED12”)。

我正在使用此查询来解决每个组中重复的第一个问题

select GROUP, ID, count(ID)
from TABLE1
group by GROUP, ID
having count(ID) > 1
;

上面查询的输出

GROUP  |  ID   | COUNT

A        AED12     2
B        VFR54     2
C        9KMN2     2

我想总结每组重复的数量(A、B 组中有多少重复),我想这样(例如,为了目的而组成 #s)

GROUP | Sum of Dups IDs
A         2134
B         23321
C         11235

同时还可以识别多个组中存在哪些 ID,并计算各组中存在的 ID。输出类似于当字段表示 ID 存在于超过 1 个组中的情况,如果是“真”,如果不是 - “假”。仍在考虑如何计算/分组输出的样子,因为有数百万行..

任何帮助将不胜感激 - Snowflake 的新手。

【问题讨论】:

  • 请编辑问题并显示您想要的结果。
  • 我编辑了这个问题 - 谢谢你的建议。

标签: sql group-by count snowflake-cloud-data-platform


【解决方案1】:

您可以使用窗口函数计算一个 id 出现在不同组中的数量,然后进行聚合。这是一个计算单例和成对的示例:

select group,
       count(*) as num_elements,
       count_if(num_groups = 1) as num_onesies,
       count_if(num_groups = 2) as num_twosies
from (select t.*,
             count(*) over (partition by id) as num_groups
      from table1 t
     ) t
group by group;

编辑:

如果您有重复,最好在进行上述处理之前将其删除:

select group,
       count(*) as num_elements,
       count_if(num_groups = 1) as num_onesies,
       count_if(num_groups = 2) as num_twosies
from (select t.*,
             count(*) over (partition by id) as num_groups
      from (select distinct group, id
            from table1 t
           ) t
     ) t
group by group

【讨论】:

  • @Gordan Linoff!谢谢 - 这实质上是在每个组中查看 ID 是否存在于多个组中?那是 num_onsies,num_twosites 吗?
  • @Dinho 。 . .是的。 “onesies”和“twosies”是英语的口语,最常用于泳衣和婴儿装——指的是一套衣服的件数。
  • 想出了大声笑,只是确保我理解了语法。因此,如果 num_groups = 1 -- 这意味着这些 ID 在每个组中都是唯一的,但如果 num_groups = 2 -- 那么这些 ID 在其他组中可见?
  • @Dinho 。 . . “2”正好意味着另外两个组。 “3”将是 3 个其他组,依此类推。您可以将>= 2 用于两个或更多组。
  • @Dino 。 . .数据中有重复项吗?上面是计算表中的行数——所以它假设了唯一的组。哦,我明白了,你确实有重复。
猜你喜欢
  • 1970-01-01
  • 2017-06-08
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2013-11-10
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多