Sql 从比较单个表中的多个列中检索结果
在上表中,我想检索Area>0.4的列。这将检索8行。但我想从另一方面得到答案。 查看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
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;