加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

RANK()排名函数如何使用,能做哪些

发布时间:2023-05-19 15:46:53 所属栏目:MsSql教程 来源:
导读:这篇文章主要介绍“RANK()排名函数如何使用,能做什么”,有一些人在RANK()排名函数如何使用,能做什么的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习
这篇文章主要介绍“RANK()排名函数如何使用,能做什么”,有一些人在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 ON
 
GO

SET QUOTED_IDENTIFIER ON
 
GO

-- =============================================
 
-- Author: _Hey_Jude
 
-- Create date: 2021-01-26
 
-- Description: 获取今日发表帮助/回复的新用户
 
-- =============================================
 
CREATE PROCEDURE [dbo].[sp_TodayJoinUser]
 
@tableLevel int,
 
    @date varchar(30)
 
AS
 
Declare @Sql nvarchar(max)
 
declare @minTabId int
 
declare @maxTabId int
 
declare @maxf_id int
 
declare @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 @Sql
 
END
 
GO
 
partition的意思是对数据进行分区,sql语句如下
 
SELECT* FROM (
 
    SELECT
 
        ROW_NUMBER() over(partition by [姓名] order by [打卡时间] desc) as rowNum,
 
        [姓名],
 
        [打卡时间]
 
    FROM [dbo].[打卡记录表]
 
    ) temp
 
WHERE temp.rowNum = 1
 
通过 partition by [姓名] order by [打卡时间] desc,这句就可以做到,让数据按照姓名分组,并且在每组内部按照时间进行排序
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章