首页 > 解决方案 > 获取同一表中给定列的最小组

问题描述

我有一个有 3 列的表。Plate_Id Prod_Id Location_ID

桌子看起来像这样,

在此处输入图像描述

所需的结果应该是突出显示的行。

基本上,我需要具有最小组位置的 plate_id。之后我不在乎 Prod_Id。

标签: sqlgrouping

解决方案


一种方法使用相关子查询。以下使用 ANSI SQL 语法:

select t.*
from t
where t.prodId = (select t2.prodId
                  from t t2
                  where t2.plateid = t.placteid
                  group by t2.prodId
                  order by count(*) asc
                  fetch first 1 row only
                 );

另一种方式使用窗口函数:

select t.*
from (select t.*, rank(cnt) over (partition by plateid order by cnt) as seqnum
      from (select t.*,
                   count(*) over (partition by plateid, prodid) as cnt
            from t
           ) t
     ) t
where seqnum = 1;

此版本返回所有“最小”组。如果您只想要一个 per plateid,请使用row_number()而不是rank().


推荐阅读