首页 > 解决方案 > 在 group by 期间,我需要采用一个未在 group by 中使用的变量,我也不想采用它的聚合函数(我想要它原样)

问题描述

我有一个包含数百万条记录和 8 列的数据框。我想用 col1 和 col2 对其进行分组,在选择中,我想要name_id、 max(SUM)、col1、col2。

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

您能否建议任何可以解决我在 SQL 或 Pyspark 中的问题的方法。

在此处输入数据框 SUM = 有数据的列数并且 name_id 是唯一的: 截图 1

所需输出:name_id(原样)、max(SUM)、Col1、Col2 截图 2

我尝试了这样的事情,但它不工作: 截图 3

欢迎任何建议!

我尝试了下面的代码,该代码在一种情况下运行良好,而在其他情况下运行良好。

尝试过的代码

工作场景,当我在 sum 列中有重复的最大值时,它工作正常并重新调整 max name_id 这是我的要求 工作场景

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

标签: mysqlsqlpyspark

解决方案


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

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

推荐阅读