sql 排名开窗函数 ROW_NUMBER、DENSE_RANK、RANK、NTILE属于排名函数。
排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。
ODER BY 指定排名开窗函数的顺序。在排名开窗函数中必须使用ORDER BY语句
http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html
rank 跳过排名 dense_rank 继续排名
create table tb_test(name varchar(10),val int,memo varchar(20))
insert into tb_test values('a', 2, 'a2(a的第二个值)')
insert into tb_test values('a', 1, 'a1--a的第一个值')
insert into tb_test values('a', 3, 'a3:a的第三个值')
insert into tb_test values('b', 1, 'b1--b的第一个值')
insert into tb_test values('b', 3, 'b3:b的第三个值')
insert into tb_test values('b', 2, 'b2b2b2b2')
insert into tb_test values('b', 4, 'b4b4')
insert into tb_test values('b', 5, 'b5b5b5b5b5')
insert into tb_test values('b', 5, 'bb5')
go
--方案1
select a.* from tb_test a where not exists(select 1 from tb_test where name = a.name and val > a.val) ;
select a.* from tb_test a,(select name,max(val) val from tb_test group by name) b where a.name = b.name and a.val = b.val order by a.name;
select a.* from tb_test a inner join (select name , max(val) val from tb_test group by name) b on a.name = b.name and a.val = b.val order by a.name
--方案2 分组后 取每组前 2条数据
select * from (
SELECT ROW_NUMBER()
over
(PARTITION By name order by val) as rowId,tb_test.*
FROM tb_test
) t
where rowid <= 2
分享到:
相关推荐
本文将深入探讨如何在SQL Server中实现分组排序并获取每组的特定行数据。 首先,我们要理解分组的概念。在SQL中,`GROUP BY`语句用于将数据根据一个或多个列进行分类,例如在示例代码中,我们根据`A.DocNo`, `A1....
`GROUP BY`子句在SQL查询语言中用于将数据表中的行归类为一组,通常与聚合函数如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, 和 `MIN()` 结合使用,以便对每一组的数据进行统计分析。例如,如果我们有一个销售记录表,并...
在SQL Server中,将某一列的值拼接成字符串是一个常见的需求,这通常涉及到数据的格式化输出,比如创建报告或者导出数据。这个过程可以通过几种不同的方法来实现,其中包括使用FOR XML PATH子句和CONCAT函数。我们将...
表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录
在给定的标题和描述中,我们关注的是如何利用`NTILE`来获取每组数据的前10%。下面将详细解释`NTILE`函数的工作原理以及如何运用它来实现这个目标。 **NTILE函数详解** `NTILE(n)`函数将结果集分成n个组,每个组尽...
在SQL Server中,过滤数据是数据分析的关键步骤,尤其在处理关系型数据库时。规范化是数据库设计的基本原则,目的是减少数据冗余,确保数据的一致性和完整性。规范化要求数据以键值关联的方式存在于不同表中,避免了...
SQL Server的表分组工具是数据库管理中的一个重要概念,它主要应用于大型的SQL Server数据库环境中,帮助管理员有效地组织和管理大量的数据库表。这样的工具能够提高工作效率,使得数据库的架构更易于理解和维护。...
在SQL Server中,分组和求和是数据库查询中的核心操作,它们经常被用来对数据进行聚合,以获得更高级别的统计信息。本篇将详细解释如何使用SQL Server的`GROUP BY`语句来实现分组求和。 首先,`GROUP BY`语句是SQL...
当数据库表中的某些列有重复的值时,我们可能需要仅选取其中的一条记录,例如,选择每组重复数据的第一条或者最后一条。题目中提到的SQL语句就是解决这类问题的一个示例。 首先,我们创建一个名为`TestData`的数据...
SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威指南。T-SQL是微软SQL Server数据库管理系统的核心语言,用于数据操作、查询、存储过程编写以及...
`会按column1的值分组并计算每组的数量。 4. **排序**:ORDER BY语句用于对结果集进行排序,可以指定升序(ASC)或降序(DESC)。例如,`SELECT * FROM table_name ORDER BY column1 DESC;`将按照column1的值降序排列...
在SQL Server中,分组统计是一项基础且重要的功能,它允许我们按照特定列的值对数据进行聚合,以便分析和汇总信息。`GROUP BY`语句是实现这一目标的关键,而`WITH ROLLUP`是扩展这个功能的一种方法,特别适用于生成...
在SQL Server数据库管理中,Group By语句是用于对数据进行分组并计算每个组的汇总信息的关键工具。通常,我们使用聚合函数如COUNT、SUM、AVG、MIN和MAX等与Group By一起,以便对特定列进行分析。然而,当我们需要在...
在SQL中,有时候我们需要在对数据进行分组后,从每个组中获取第一条或特定的数据。这在处理聚合数据或需要展示每个类别代表性的记录时非常有用。本篇将详细介绍如何利用SQL语句来实现这一目标,以Northwind数据库中...
《Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询》是一部深入探讨SQL Server 2005数据库管理系统中Transact-SQL(T-SQL)查询技术的专业著作。本部分主要聚焦于如何高效、准确地在SQL Server 2005环境中...
根据提供的文件信息,我们可以整理出一系列与SQL Server相关的知识点,主要涵盖了SQL Server的基本概念、数据库管理操作、查询语言(T-SQL)的使用方法及数据完整性约束等方面的内容。下面将详细解析这些知识点。 #...
根据给定的SQL Server数据库语句,我们可以深入探讨与这些查询相关的知识点,这些知识点涵盖了SQL的基本操作、数据关联、聚合函数、子查询以及条件筛选等多个方面。以下是对这些语句涉及的重要知识点的详细解析: #...
### 数据库实验(SQL Server):高级SQL查询详解 #### 分组查询(GROUP BY) 分组查询是SQL中一种非常重要的技术,它可以帮助我们按指定的列将数据进行分类汇总,进而实现各种复杂的统计需求。在给定的例子中,...