在 group by 期间,我需要采用一个未在 group by 中使用的变量,我也不想采用它的聚合函数(我想要它原样)
Posted
技术标签:
【中文标题】在 group by 期间,我需要采用一个未在 group by 中使用的变量,我也不想采用它的聚合函数(我想要它原样)【英文标题】:During group by I need to take a variable which is not using in group by also I don't want to take its aggregation function (I want it as it is) 【发布时间】:2020-01-20 07:05:32 【问题描述】:我有一个包含数百万条记录和 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。
【问题讨论】:
我有几个问题:1.为什么banana, green
不在结果中,2.你如何在预期结果中选择water melon,red
行?换句话说,为什么行10005
而不是行10003
?
是的,香蕉,绿色应该在答案中,我会更新我的问题,如果 SUM 列的值与西瓜的情况相同,我需要一个最大的 name_id。
添加文本比添加打印屏幕更好
关于第二个例子:我不明白你为什么在结果中需要 365042 以及为什么 126585 不在要求的结果中。
关于第三个例子:当前输出与查询不对应!
【参考方案1】:
这是一个经典的最大每组问题。我建议使用以下解决方案来解决这个问题:
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
【讨论】:
Baca:我正在检查数据,发现此逻辑在 SUM 列没有重复值的情况下失败,因此查询给我 null 值。 @aamirmalik124 使用示例详细说明您的问题!你的评论没有意义。【参考方案2】:你似乎想要:
select max(name_id), max(sum), col1, col2, max(col3), . . .
from t
group by col1, col2;
您的最后一列似乎没有使用max()
,但您没有解释该逻辑。
【讨论】:
您好,请您重新检查我的要求并给我一些答复,谢谢!以上是关于在 group by 期间,我需要采用一个未在 group by 中使用的变量,我也不想采用它的聚合函数(我想要它原样)的主要内容,如果未能解决你的问题,请参考以下文章