在达到某个值之前计算 SQL 结果中的记录数

Count the number of records in SQL results before a certain value is reached

希望计算 SQL 条记录的数量,直到达到 table 列之一中的特定值。使用 Asp /VBscript.

不确定如何制定查询。

我已经尝试过了,但当然行不通。我想要的是按 "points" 列降序排列结果,按 city_id“12500”分组。然后我需要计算记录数,直到匹配特定的 "member_id"。某些 "points" 值也可能相同,这会导致计数不正确。应忽略类似的点值。

db 名为 "rankings" 看起来像这样:

id  |  member_id  |  city_id  |  points
1   |      1      |   12500   |    2
3   |      2      |   12500   |    5
4   |     34      |     800   |    1
5   |     14      |   12500   |    14
6   |      6      |     600   |    12
7   |     11      |   12500   |    11
8   |     12      |   12500   |    5

例如,如果我想找到 member_id“2”的排名,恰好属于 city_id“12500”,Count 函数的正确最终值应该是 3 . 这是因为 member_id "2" 在 city_id "12500" 中的第三高分值,即使考虑到与 member_id "12" 的平局。

以下是我能想到的所有内容,因为我无论如何都不是专业人士,而且我知道它遗漏了很多!

member_id = 2
city_id = 12500

SELECT Count() as city_ranking FROM (SELECT * from rankings WHERE city_id='"&city_id&"' AND member_id <> '"&member_id&"' ORDER BY points DESC)

DENSE_RANK 函数应该可以满足您的需求!

SELECT *, DENSE_RANK() OVER (PARTITION BY city_ID ORDER BY points DESC) AS columnAliasOfYourChoice FROM TABLE

您可以通过以下方式获得特定会员的排名:

select count(distinct points)
from ranking r cross join
     (select r.*
      from ranking r
      where member_id = 5
     ) rm
where r.points >= rm.points and
      r.city_id = rm.city_id;

尽管您可以使用 window 函数来表达这一点,但它有点烦躁,因为您必须小心放置过滤器的位置。