Sql 求行的秩

Sql 求行的秩,sql,sql-server,Sql,Sql Server,我有一个包含一些记录的表,我想检查行的排名,如果排名大于100,我将设置权限。 我编写了流动代码来查找记录的排名,但当我在没有附加字段(如用户名或族)的情况下使用排名或行号函数时,它不起作用,尽管它可以与其中一个附加字段一起使用 SELECT * from (Select username, Rank() over(order by point desc) as 'ranking' from student) t where (username='test') 我想找到一条记录并设置一个

我有一个包含一些记录的表,我想检查行的排名,如果排名大于100,我将设置权限。
我编写了流动代码来查找记录的排名,但当我在没有附加字段(如用户名或族)的情况下使用排名或行号函数时,它不起作用,尽管它可以与其中一个附加字段一起使用

SELECT * from
(Select username,
Rank() over(order by point desc) as  'ranking' 
from student) t
 where (username='test')
我想找到一条记录并设置一个具有该记录秩的变量。

可能是这个查询吗

Select count(*)+1 as rank from student 
where point > (select point from student where username = 'test')

Wich应该返回点数少于所选用户的用户数

我不知道您的sqlser版本是否支持cte。如果是>=2005 sqlserver:

结果:

2

要使
RANK
起作用,您需要指定要对其进行排序的
PARTITION BY
列,然后,
ORDER BY
类似于出现两个列的值相同且存在冲突的情况,然后,按列排序将通过排序那些冲突的记录来解决问题。

您能为问题添加一些示例数据吗?为什么标签
MySQL
在那里?我认为这与所问的问题没有多大关系。此查询给出了一个等级。。。谢谢你的-1。。。你的建议是什么?欢迎光临。该查询不会对学生进行排名,它只计算得分低于用户名“test”(+1)的学生人数。绝对不是海报要求的。如果你是第三名,你的排名就是得分超过你+1的人数。现在我明白了。您错过了标记,这是一个SQL Server问题,而不是MySQL问题。如果这是原作者想要的,那么可以用这样的秩函数轻松解决:顺便说一句,这正是他在问题中发布的内容!完全不正确。这清楚地表明您没有在ORDER BY之前指定列。这就是“订购者”的目的@Gidil:文档中说,
partition_by_子句将FROM子句生成的结果集划分为应用函数的分区。如果未指定,则该函数将查询结果集的所有行视为单个组这与您发布的内容关系不大(因为分区依据是可选的)。而且,很明显,你在这方面没有太多经验。“按元素划分”允许在同一结果集中有多个列组,并根据分区进行分隔。
2