Во время group by мне нужно взять переменную, которая не используется в group by, и я не хочу использовать ее функцию агрегирования (я хочу, чтобы она была такой, как есть). - PullRequest
0 голосов
/ 20 января 2020

У меня есть фрейм данных с миллионами записей и 8 столбцами. Я хочу сгруппировать его по столбцам col1 и col2 и выбрать, мне нужно name_id , max (SUM), col1, col2.

Теперь проблема в том, что я не использую name_id в группе по условию и не является агрегатной функцией.

Можете ли вы предложить какой-либо метод, который решает мою проблему в SQL или Pyspark.

Фрейм входных данных здесь SUM = количество столбцов с данными, а name_id уникально: Screenshot 1

Обязательный вывод: name_id (как есть), max (SUM), Col1, Col2 Screenshot 2

Я пытался что-то вот так, но не работает: Screenshot 3

Любые предложения приветствуются!

Я попробовал приведенный ниже код, который отлично работает с одним сценарием, а не с другими.

Tried Code

Рабочий сценарий, когда в столбце суммы есть повторяющиеся максимальные значения, тогда он работает нормально и перенастраивает максимальное имя_идентификатора, что является моим требованием Working Scenario

Когда столбцы SUM не имеют дубликатов максимального значения тогда это возвращает нуль, в таблице ниже согласно логу c мой вывод должен содержать name_id = 48981 и name_id = 52214, но я получаю единственный name_id = 52214. Not Working Scenario

Ответы [ 2 ]

1 голос
/ 20 января 2020

Это классическая проблема для каждой группы. Я бы предложил использовать следующее решение этой проблемы:

select d.*
from data_frame d
join (
    select col_1, col_2, 
       max(sum) max_sum, 
       max(name_id) max_name_id
    from data_frame
    group by col_1, col_2
) t on d.col_1 = t.col_1 and 
       d.col_2 = t.col_2 and
       d.name_id = t.max_name_id and
       d.sum = t.max_sum
0 голосов
/ 20 января 2020

Вы, похоже, хотите:

select max(name_id), max(sum), col1, col2, max(col3), . . .
from t
group by col1, col2;

В последнем столбце, похоже, не используется max(), но вы не объяснили, что logi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...