对于超过 1 的记录计数,检索最小值
For count of records having more than 1 retrieve the least value
我在数据库中有一个 table。我需要从 table 获取记录,如果我的 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 也有帮助)
请帮忙!谢谢
您正在使用保留字作为列名,需要用反引号 (MySQL) 括起来。它可能与其他数据库不同,例如 postgres ("")。但是,如果您使用的是那种命名方式,您可能已经知道了。
不要忘记将 table 名称“test”替换为您的名称。
select * from test where (id, itm_num) in
(select id, min(itm_num) from test group by id) order by id asc
我会简单地计算行号和 select 第一个。
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"))
我在数据库中有一个 table。我需要从 table 获取记录,如果我的 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 也有帮助) 请帮忙!谢谢
您正在使用保留字作为列名,需要用反引号 (MySQL) 括起来。它可能与其他数据库不同,例如 postgres ("")。但是,如果您使用的是那种命名方式,您可能已经知道了。 不要忘记将 table 名称“test”替换为您的名称。
select * from test where (id, itm_num) in
(select id, min(itm_num) from test group by id) order by id asc
我会简单地计算行号和 select 第一个。
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"))