max_by/min_by
Узнала про прикольные функции, они заменяют оконку/CTE на одно поле
Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту
result = df.groupBy("department").agg( F.max_by("name", "years") )
И все! Не надо никаких row_number = 1
В Spark SQL можно еще и фильтр набросить:
spark.sql(""" select department, max_by(name, years) filter (where name is not null) from employees group by department """)
А в Trino еще можно собрать массив топ-n в убывающем порядке:
select department, max_by(name, years) AS top_employee, max_by(name, years, 2) AS top_2_employees from employees group by department
Аналог в ClickHouse - argMax
@data_engineerette