如何按具有重复值的列进行分组,同时使用sql提取表中所有关联的列?

f87krz0w  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(329)

我有一个有5列的表:

Party_ID | Site_ID | Party_Name | Group_Num | Code
---------+---------+------------+-----------+-----
123         A3D       MSFT        092079177   04
212         B5C       MSFT        092079177   05
313         S4F       MSFT        828539556   08
314         G3B       MSFT        828434232   09
515         KM9       MSFT        022901486   10
616         NM5       MSFT        022901486   09

期望输出:

Party_ID | Site_ID | Party_Name | Group_Num | Code | Count
---------+---------+------------+-----------+------+--------
123         A3D       MSFT        092079177   04      12
212         B5C       MSFT        092079177   05      2
313         S4F       MSFT        828539556   08      3
314         G3B       MSFT        828434232   09      1 
515         KM9       MSFT        022901486   10      2

我想按'groupnum'分组,这是一个每行9位数的值,同时将所有相关字段数据作为一个新表拉入。组\u num中有重复值,但与其他字段中的唯一值配对。
新的sql和使用雪花。我现在有这个来计算组\u num在下面的查询中给参与方\u id的发生次数:

SELECT * 
FROM F1_TABLE 
GROUP BY PARTY_ID
HAVING COUNT(DISTINCT Group_Num) > 1)
ORDER BY COUNT(DISTINCT Group_Num) DESC;
ycggw6v2

ycggw6v21#

因此,不确定是否要最终得到一个完全重复数据消除的表,但是这个窗口函数+ QUALIFY 允许您为每个重复选择要保留的记录:

SELECT *
FROM F1_TABLE
QUALIFY row_number() OVER (PARTITION BY Group_Num ORDER BY Party_ID) = 1;

本例选择第一方id,但是您可以选择任何您想要的(或者让snowflake通过排除 ORDER BY 条款。
如果这不是你要找的,你能提供你的问题结果表是什么样的吗?

bfnvny8b

bfnvny8b2#

不知道你到底想达到什么目的,但是如果你想要的只是第一个附加了groupnum计数的表,那么只需要在子查询中进行计数并连接到它。

SELECT T1.*, T2.COUNTER
FROM F1_TABLE T1
INNER JOIN (SELECT Group_Num, COUNT(1) AS COUNTER
            FROM F1_TABLE
            GROUP BY Group_Num) AS T2
ON T1.GROUP_NUM = T2.GROUP_NUM

如果您也试图以某种方式对主表进行重复数据消除,请执行select distinct或group by

相关问题