sql—用于计算列值小于当前行值的行数的查询

cczfrluj  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(307)

我有一张像这样的table

ID      VALUE
-------------
1       0.5
2       0.3
3       1.6
4       5.5
5       0.8
6       0.8
7       0.2

我想写一个查询,找出值小于当前行值的行数。例如,对于id为5的行,总行数应为3(id为1、2、7)。所以查询结果可能是

ID      VALUE    LessThanCount
------------------------------
1       0.5      2
2       0.3      1
3       1.6      5
4       5.5      6
5       0.8      3
6       0.8      3
7       0.2      0

我正在使用最新的mssqlserver。

ds97pgxw

ds97pgxw1#

我认为这可以用窗口函数来计算:

select t.*,
       rank() over (order by value) - 1
from t;
``` `rank()` 提供小于值加1的行数。
这是一把小提琴。
xhv8bpkk

xhv8bpkk2#

也可以使用自(左-外)联接。

Select A.ID,A.VALUE ,SUM(ISNULL(B.LessThanCount,0)) as LessThanCount
FROM tbl A
LEFT JOIN (SELECT value, count(*) as LessThanCount 
           FROM tbl
           GROUP BY value) B ON B.VALUE < A.VALUE
GROUP BY A.ID,A.VALUE            
ORDER BY A.ID

ID  VALUE   LessThanCount
1   0.5     2
2   0.3     1
3   1.6     5
4   5.5     6
5   0.8     3
6   0.8     3
7   0.2     0
w1jd8yoj

w1jd8yoj3#

等级的定义:
一加上值小于当前值的行数
问题是:
找出值小于当前行值的行数。
解决方案:

rank() over (order by value) -1

相关问题