我有一个具有数百万条记录和8列的数据框。
我想将其与col1和col2分组,在选择中,我想要name_id,max(SUM),col1,col2。

现在的问题是我没有按条件在组中使用name_id,也不是聚合函数。

您能提出解决我的SQL或Pyspark问题的任何方法吗?

在这里输入数据帧SUM =列数包含数据,并且name_id是唯一的:


必需的输出:name_id(按原样),max(SUM),Col1,Col2


我尝试了类似的方法,但是没有用:


任何建议都欢迎!

我尝试了下面的代码,该代码在一种情况下可以正常工作,而在其他情况下则不能。



工作方案,当我在sum列中有重复的最大值时,则可以正常工作并重新调整max name_id,这是我的要求
 

当SUM列没有最大重复值时,它将返回null,根据逻辑在下表中,我的输出应包含name_id = 48981和name_id = 52214,但我得到的唯一name_id = 52214。

最佳答案

这是每组最大的经典问题。我建议使用以下解决方案来解决此问题:

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

关于mysql - 在group by期间,我需要采用一个不在group by中使用的变量,我也不想采用其聚合函数(我想要它的原样),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59818378/

10-16 05:57