Как сгруппировать по столбцу с повторяющимися значениями, вытягивая все связанные столбцы в таблице с SQL? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть таблица с 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 

Я хотел бы сгруппировать по «Group_Num», который является 9-di git значение для каждой строки, извлекая данные всех связанных полей с ним как новую таблицу. В Group_Num есть повторяющиеся значения, но они связаны с уникальными значениями в других полях.

Новое в SQL и используется Snowflake. В настоящее время у меня есть это, чтобы подсчитать количество вхождений, которые Group_Num предоставил Party_ID в запросе ниже:

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

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Итак, не уверен, хотите ли вы в конечном итоге получить полностью удаленную таблицу или нет, но эта оконная функция + QUALIFY позволяет вам выбрать запись для каждого дублирования:

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

В этом примере выбирается первый Party_ID, но вы можете выбрать все, что хотите (или позволить Snowflake выбрать за вас, исключив предложение ORDER BY.

Если это не то, что вы ищете, не могли бы вы предоставить как ваша итоговая таблица будет выглядеть в вашем вопросе?

0 голосов
/ 05 августа 2020

Не уверен, что именно вы пытаетесь достичь, но если все, что вам нужно, это 1-я таблица с добавленным к ней счетчиком Group Num, тогда просто выполните счет в подзапросе и присоединитесь к нему, например,

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

...