sql - 获取同一表中给定列的最小组
问题描述
我有一个有 3 列的表。Plate_Id Prod_Id Location_ID
桌子看起来像这样,
所需的结果应该是突出显示的行。
基本上,我需要具有最小组位置的 plate_id。之后我不在乎 Prod_Id。
解决方案
一种方法使用相关子查询。以下使用 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()
.
推荐阅读
- javascript - 纯 html+css+js 中的 CSS 设置与 Node.JS 中的不同
- r - 在频率表中搜索特定单词
- c++ - 将 octomap 转换为 .fbx 或 .obj
- mapr - 无法从 MapR Data Science Refinery docker 容器访问 HDFS
- google-cloud-platform - 如何使用 PUBSUB 作为触发器从 Google Cloud 函数返回 JSON?
- mpls - 在启用 mpls 的路由器上配置 LDP
- ios - 在视图出现之前,我可以在哪里将 contentOffset 设置为 UICollectionView 中的最后一项?
- mysql - 如何比较列并在表中计数
- cassandra - Cassandra 浮点精度
- c# - UWP 无法更改 C# 代码中的图像源