首页 > 解决方案 > Oracle SQL:如何从组中查找记录

问题描述

我有一个表,其中有一个 PrimaryKey,Foreign Key。我只想找到每个外键的一个主列表。例子 表

我需要一个只返回主键(1 或 2 或 3)和(4 或 5)或(6 或 7 或 8)的查询,基本上是 1,4 和 6。我怎样才能为每个外键获得一个 PK

标签: sqloracle

解决方案


使用聚合:

select foreignKey, min(primaryKey)
from t
group by foreignKey;

如果你想要一个随机值,你可以使用以下keep语法:

select foreignKey,
       min(primaryKey) keep (dense_rank first order by dbms_random.random)
from t
group by foreignKey;

如果你有很多列,你可以使用row_number()或相关的子查询:

select t.*
from t
where t.primarykey = (select min(t2.primarykey) from t t2 where t2.foreignkey = t.foreignkey);

推荐阅读