Sql 从比较单个表中的多个列中检索结果

Sql 从比较单个表中的多个列中检索结果,sql,Sql,在上表中,我想检索Area>0.4的列。这将检索8行。但我想从另一方面得到答案。 查看FID=5的情况。在这种情况下,RP 100和500的面积满足标准,但对于RP=100,输出应具有较高的重量。对于FID=6的情况,RP=100不满足标准,但RP=500和RP=555满足标准。我想把重量给RP=500 所需结果: FID RP Area Count 1 100 0.780 1 2 100 0.906 2 2 500 0.094 2 3 100 1.000

在上表中,我想检索Area>0.4的列。这将检索8行。但我想从另一方面得到答案。 查看
FID=5
的情况。在这种情况下,RP 100和500的面积满足标准,但对于
RP=100
,输出应具有较高的重量。对于
FID=6
的情况,
RP=100
不满足标准,但
RP=500
RP=555
满足标准。我想把重量给
RP=500

所需结果:

FID RP  Area    Count
1   100 0.780   1
2   100 0.906   2
2   500 0.094   2
3   100 1.000   1
4   100 1.000   1
5   100 0.784   2
5   500 0.916   2
6   100 0.332   3
6   500 0.780   3
6   555 0.643   3

因此,您希望每个id的第一行
Area
的值超过0.4,并且“first”按
RP
排序

窗口函数提供了执行此操作的机制。大多数数据库支持
行编号()


子查询过滤行,以便只包括有效值为
Area
的行。
row\u number()
函数为
fid
中的行分配顺序值(因为
划分子句)。值是按
rp
顺序分配的(由于
order by
子句)。

您使用的是什么数据库?
FID RP  Area    Count
1   100 0.78007 1
2   100 0.90626 2
3   100 1   1
4   100 1   1
5   100 0.7835  2
6   500 0.78    3
select FID, RP, Area, "Count"
from (select t.*,
             row_number() over (partition by fid order by rp) as seqnum
      from t
      where Area > 0.4
     ) t
where seqnum = 1;