我在資料庫中有一個表。我需要從表中獲取記錄,如果我的 id 計數大于 1,那么我必須選擇具有最小值的記錄(itm_num)。
檢索所有唯一 ID。對于 id 的計數大于 1,則檢索具有最小值的 itm_num(按升序排序)。
輸入 :
Source id group cd itm_num
eu2 10404458 MELDING DEF 0003
eu2 10404458 MELDING DEF 0002
eu2 10404458 AANV PLAN 0001
pda 10020520 AANVRAA PLAN1 0001
pda 10020520 BGAAD PLAN1 0007
pda 10020527 HYGGG PLAN1 0002
sys 10020120 HYGGG PLAN1 0002
pda 10020620 HYGGG PLAN1 0002
預期輸出:
Source id group cd itm_num
eu2 10404458 AANV PLAN 0001
pda 10020520 AANVRAA PLAN1 0001
pda 10020527 HYGGG PLAN1 0002
sys 10020120 HYGGG PLAN1 0002
pda 10020620 HYGGG PLAN1 0002
我想在 Pyspark 中得到這個結果(SQL 也有幫助) 請幫忙!謝謝。
uj5u.com熱心網友回復:
我會簡單地計算一個行號并選擇第一個。
from pyspark.sql import functions as F, Window
df.withColumn(
"rwnb",
F.row_number().over(Window.partitionBy("id").orderBy("itm_num"))
).where("rwnb = 1").drop("rwnb ")
但是如果你不需要整行,一個簡單的 min groupby 就足夠了:
df.groupBy("id").agg(F.min("itm_num"))
uj5u.com熱心網友回復:
您正在使用保留字作為列名女巫需要用反勾號(MySQL)包圍。它可能與 postgres ("") 等其他資料庫不同。但是,如果您正在使用這種命名方式,您可能已經知道了。不要忘記將表名“test”替換為您的表名。
select * from test where (id, itm_num) in
(select id, min(itm_num) from test group by id) order by id asc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325105.html
下一篇:如何從鏈接服務器到本地機器創建表
