在达到某个值之前计算 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 函数来表达这一点,但它有点烦躁,因为您必须小心放置过滤器的位置。
希望计算 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 函数来表达这一点,但它有点烦躁,因为您必须小心放置过滤器的位置。