我有一个具有数百万条记录和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/