千家信息网

SQLServer RANK()排名函数如何使用

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天小编给大家分享一下SQLServer RANK()排名函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所
千家信息网最后更新 2025年11月07日SQLServer RANK()排名函数如何使用

今天小编给大家分享一下SQLServer RANK()排名函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

具体如下:

-- 例子表数据SELECT * FROM test;-- 统计分数SELECT name,SUM(achievement) achievement FROM test GROUP BY name; -- 按统计分数做排行SELECT RANK() OVER( ORDER BY SUM(achievement) desc) 排行,name,SUM(achievement) achievement FROM test GROUP BY name;

求助问答存储过程使用:

USE [DB]GO /****** Object:  StoredProcedure [dbo].[sp_TodayJoinUser]    Script Date: 2021/1/26 14:45:24 ******/SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO  -- =============================================-- Author:         _Hey_Jude-- Create date: 2021-01-26-- Description:    获取今日发表帮助/回复的新用户-- =============================================CREATE PROCEDURE [dbo].[sp_TodayJoinUser]         @tableLevel int,    @date varchar(30)ASDeclare @Sql nvarchar(max) declare @minTabId intdeclare @maxTabId intdeclare @maxf_id intdeclare @helpTableName nvarchar(max)declare @tableCount int BEGIN         --最小f_id所在表         set @minTabId=0         set @tableCount=@minTabId         --最大f_id所在表         set @maxf_id=(select MAX(F_ID) from [Table] where F_IsDelete=0)         set @maxTabId=@maxf_id/@tablelevel          set @helpTableName='SELECT UserID, Max([F_DateTime]) AS dt FROM [Table] GROUP BY UserID'          while @tableCount<=@maxTabId         begin                             print @tableCount                set @helpTableName += ' UNION SELECT UserID, Max([DateTime]) as dt FROM SubTable'+cast(@tableCount as nvarchar(10))+' GROUP BY UserID '                set @tableCount=@tableCount+1         end                        set @Sql='SELECT [nikename] FROM (                                         SELECT UserID, RANK() OVER(PARTITION BY UserID ORDER BY dt) AS Num,dt FROM ( '+@helpTableName+' ) AS T ) AS NewT                           LEFT JOIN [UserTable] A WITH(NOLOCK) ON NewT.UserID = A.UserId WHERE Num = 1 AND dt > '''+@date+''''          Exec sp_executesql @SqlEND GO

partition的意思是对数据进行分区,sql语句如下

SELECT* FROM (    SELECT        ROW_NUMBER() over(partition by [姓名] order by [打卡时间] desc) as rowNum,        [姓名],        [打卡时间]    FROM [dbo].[打卡记录表]    ) tempWHERE temp.rowNum = 1

通过 partition by [姓名] order by [打卡时间] desc,这句就可以做到,让数据按照姓名分组,并且在每组内部按照时间进行排序

以上就是"SQLServer RANK()排名函数如何使用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0