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 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,这句就可以做到,让数据按照姓名分组,并且在每组内部按照时间进行排序

到此这篇关于SQLServer RANK() 排名函数的使用的文章就介绍到这了,更多相关SQLServer RANK()内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法

    ROW_NUMBER() 说明:返回结果集分区内行的序列号,每个分区的第一行从 1 开始.语法:ROW_NUMBER () OVER ( [ <partition_by_clause> ] <order_by_clause> ) .备注:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序.参数:<partition_by_clause> :将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区.       <o

  • 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 tes

  • SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较

    排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 下面分别介绍一下这四个排名函数的功能及用法.在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示: 图1 其中field1字段的类型是int,field2字段的类型是varchar 一.row_number row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号

  • SqlServer 2005的排名函数使用小结

    尽管从技术上讲,其它排名函数的计算与ROW_NUMBER类似,但它们的的实际应用却少很多.RANK和DENSE--RANK主要用于排名和积分.NTILE更多地用于分析. 先创建一个示例表: 复制代码 代码如下: SET NOCOUNT ON USE [tempdb] IF OBJECT_ID('Sales')IS NOT NULL DROP TABLE sales CREATE TABLE Sales ( empid VARCHAR(10) NOT NULL PRIMARY KEY, mgrid

  • sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介绍

    1.ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询,  比如查询前10个 查询10-100个学生. 实例: 1.1对学生成绩排序 这里number就是每个学生的序号 根据studentScore(分数)进行desc倒序 1.2获取第二个同学的成绩信息 这里用到的思想就是 分页查询的思想 在原sql外再套一层select  where  t.number>=1  and  

  • 实例讲解sql server排名函数DENSE_RANK的用法

    一.需求 之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页:今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现. 需求很简单:求成绩排名前五的学生信息. 例如: 由于成绩可以并列,所以前五名可能有多个.例如: 测试数据: declare @t table (ID int, StudentName nvarchar(15), Score int) insert int

  • SQL Server中的排名函数与分析函数详解

    一.排名开窗函数概述 SQL Server的排名函数是对查询的结果进行排名和分组,TSQL共有4个排名函数,分别是:ROW_NUMBER.RANK.DENSE_RANK和NTILE. 他们和OVER()函数搭配使用,按照特定的顺序排名. 排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用. PARTITION BY用于将结果集进行分组,开窗函数应用于每一组. ODER BY 指定排名开窗函数的顺序.在排名开窗函数中必须使用ORDER BY语句. 1.ROW_

  • SQL查询排名函数实例

    在实际开发中经常会遇到计算某个字段的排名的情况 如下表:totak_sales 现在又如此要求:按sales的逆序排序,要求添加一个sales_rank字段,显示排名顺序 方法: 复制代码 代码如下: SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank FROM Total_Sales a1, Total_Sales a2 WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name

  • oracle排名函数的使用方法分享

    在oracle中,有rank,dense_rank,row_number,以及分组排名partition. 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,2,3 row_number:排名采用唯一序号连续值,例如1,2,3,4 partition:将排名限制到某一分组 格式: row_number() over(partition by bb.channel_name ord

  • SQLServer之常用函数总结详解

    SQLServer中的常用函数 字符串函数 len() 计算字符串的长度 select LEN(name) from test1 --计算name的长度 大小写转换 lower() upper() select lower('STUDENT !') select upper('student !') 去空 ltrim() 字符串左侧的空格去掉 ,rtrim()字符串右侧的空格去掉 declare @str varchar(100) = ' a a a ' select ltrim(@str) s

  • SQLServer常见数学函数梳理总结

    目录 SQLServer常见的数学函数 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SIGN(x) 6.取整的函数CEILING(x)和FLOOR(x) 7.幂运算函数POWER(x,y).SQUARE(x).和EXP(x) 8.对数的运算LOG(x)和LOG10(x) 9.角度与弧度相互转换的函数RANDIANS(x) 10.正弦函数SIN(x)和反正弦函

随机推荐