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

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

我有一张像这样的table

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

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

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

我正在使用最新的mssqlserver。

ds97pgxw

ds97pgxw1#

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

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

xhv8bpkk2#

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

  1. Select A.ID,A.VALUE ,SUM(ISNULL(B.LessThanCount,0)) as LessThanCount
  2. FROM tbl A
  3. LEFT JOIN (SELECT value, count(*) as LessThanCount
  4. FROM tbl
  5. GROUP BY value) B ON B.VALUE < A.VALUE
  6. GROUP BY A.ID,A.VALUE
  7. ORDER BY A.ID
  8. ID VALUE LessThanCount
  9. 1 0.5 2
  10. 2 0.3 1
  11. 3 1.6 5
  12. 4 5.5 6
  13. 5 0.8 3
  14. 6 0.8 3
  15. 7 0.2 0
展开查看全部
w1jd8yoj

w1jd8yoj3#

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

  1. rank() over (order by value) -1

相关问题