`
raozhiyong11
  • 浏览: 138481 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

SQL Server 按某一字段分组取最大(小)值所在行的数据

阅读更多
SQL Server 按某一字段分组取最大(小)值所在行的数据


SQL Server 按某一字段分组 最大 (小)值所在行的数据

-- 按某一字段分组 最大 (小)值所在行的数据
--
(爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23于浙江杭州)
/*

数据如下:
name val memo
a    2   a2(a的第二个值)
a    1   a1--a的第一个值
a    3   a3:a的第三个值
b    1   b1--b的第一个值
b    3   b3:b的第三个值
b    2   b2b2b2b2
b    4   b4b4
b    5   b5b5b5b5b5
*/
-- 创建表并插入数据:
create table tb(name varchar ( 10 ),val int ,memo varchar ( 20 ))
insert into tb values ( ' a ' ,    2 ,   ' a2(a的第二个值) ' )
insert into tb values ( ' a ' ,    1 ,   ' a1--a的第一个值 ' )
insert into tb values ( ' a ' ,    3 ,   ' a3:a的第三个值 ' )
insert into tb values ( ' b ' ,    1 ,   ' b1--b的第一个值 ' )
insert into tb values ( ' b ' ,    3 ,   ' b3:b的第三个值 ' )
insert into tb values ( ' b ' ,    2 ,   ' b2b2b2b2 ' )
insert into tb values ( ' b ' ,    4 ,   ' b4b4 ' )
insert into tb values ( ' b ' ,    5 ,   ' b5b5b5b5b5 ' )
go

-- 一、按name分组 val最大 的值所在行的数据。
--
方法1:
select a. * from tb a where val = ( select max (val) from tb where name = a.name) order by a.name
-- 方法2:
select a. * from tb a where not exists ( select 1 from tb where name = a.name and val > a.val)
-- 方法3:
select a. * from tb a,( select name, max (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
-- 方法4:
select a. * from tb a inner join ( select name , max (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
-- 方法5
select a. * from tb a where 1 > ( select count ( * ) from tb where name = a.name and val > a.val ) order by a.name
/*
name       val         memo                
---------- ----------- --------------------
a          3           a3:a的第三个值
b          5           b5b5b5b5b5
*/

-- 二、按name分组 val最小的值所在行的数据。
--
方法1:
select a. * from tb a where val = ( select min (val) from tb where name = a.name) order by a.name
-- 方法2:
select a. * from tb a where not exists ( select 1 from tb where name = a.name and val < a.val)
-- 方法3:
select a. * from tb a,( select name, min (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
-- 方法4:
select a. * from tb a inner join ( select name , min (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
-- 方法5
select a. * from tb a where 1 > ( select count ( * ) from tb where name = a.name and val < a.val) order by a.name
/*
name       val         memo                
---------- ----------- --------------------
a          1           a1--a的第一个值
b          1           b1--b的第一个值
*/

-- 三、按name分组 第一次出现的行所在的数据。
select a. * from tb a where val = ( select top 1 val from tb where name = a.name) order by a.name
/*
name       val         memo                
---------- ----------- --------------------
a          2           a2(a的第二个值)
b          1           b1--b的第一个值
*/

-- 四、按name分组 随机 一条数据。
select a. * from tb a where val = ( select top 1 val from tb where name = a.name order by newid ()) order by a.name
/*
name       val         memo                
---------- ----------- --------------------
a          1           a1--a的第一个值
b          5           b5b5b5b5b5
*/

-- 五、按name分组 最小的两个(N个)val
select a. * from tb a where 2 > ( select count ( * ) from tb where name = a.name and val < a.val ) order by a.name,a.val
select a. * from tb a where val in ( select top 2 val from tb where name = a.name order by val) order by a.name,a.val
select a. * from tb a where exists ( select count ( * ) from tb where name = a.name and val < a.val having Count ( * ) < 2 ) order by a.name
/*
name       val         memo                
---------- ----------- --------------------
a          1           a1--a的第一个值
a          2           a2(a的第二个值)
b          1           b1--b的第一个值
b          2           b2b2b2b2
*/

 

 

 

本文转载于:http://hi.baidu.com/lr02/blog/item/d9262e300683ac95a9018eb7.html

分享到:
评论

相关推荐

    按某一字段分组取最大(小)值所在行的数据

    按某一字段分组取最大(小)值所在行的数据

    数据库SQL SERVER2011

    SQL Server 2011 是 Microsoft 公司推出的一款关系型数据库管理系统,它基于客户/服务器(Client/Server)架构,提供高效的数据存储、管理和分析功能。在学习和使用 SQL Server 2011 时,了解其基本概念和操作是至关...

    sql server语法笔记整理

    SQL Server是一种广泛使用的关系型数据库管理系统,由微软公司开发,提供了强大的数据存储、查询和管理功能。本笔记主要针对SQL Server的语法进行整理,旨在帮助初学者快速掌握基础概念和常用操作。 一、SQL简介 ...

    SQLServer索引与数据完整性.pdf

    ### SQL Server索引与数据完整性知识点详解 #### 一、索引的概念与作用 - **定义**: 索引是在数据库表中一列或多列上建立的一种数据结构,用于提高数据检索的速度。 - **作用**: - **快速存取数据**: 通过索引可以...

    SQLserver资料|sql基础教程|sql基础案例|sql入门教程

    SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),在IT行业中广泛用于存储、管理和处理数据。SQL(Structured Query Language)是用于与数据库交互的语言,是SQL Server的核心工具。对于初学者来说...

    北大青鸟sql server2005考题哦

    2. 唯一性约束:在 SQL Server 中,主键约束用于保证表中某一列或一组列的值是唯一的,以此唯一标识每一行,选项A是正确答案。 3. 数据类型:在 SQL Server 中,二进制数据类型包括 Binary、Image 和 VarBinary,而...

    建立Microsoft_SQL_Server_2005数据仓库

    在本文中,我们将探讨如何建立一个基于Microsoft SQL Server 2005的数据仓库,特别关注如何使用分析服务来创建一个图书订单统计系统。数据仓库是存储历史数据并优化查询性能的系统,它主要用于报告和数据分析。 ...

    MYSQL,SQLSERVER,ORACLE常用的函数

    根据提供的标题和描述,本文将详细介绍在MySQL、SQL Server以及Oracle数据库中常用的函数。这些函数主要分为几大类:字符串处理函数、数值处理函数、日期处理函数、转换函数以及其他一些特殊用途的函数。 ### 字符...

    sqlserver基础

    SQL Server 是一个功能强大的关系型数据库管理系统,广泛应用于企业级数据存储、管理和分析。本教程主要涉及SQL Server的基础知识,包括数据库和表的创建、数据的增删查改等核心概念。 首先,我们来看如何在SQL ...

    浅析优化处理SQL Server数据库索引.pdf

    非聚簇索引(nonclustered indexes)是SQL Server默认建立的索引类型,它不会重新组织表中的数据,而是为每一行存储索引列值并用指针指向数据所在的页面。与聚簇索引相比,非聚簇索引在数据页和索引结构之间增加了一个...

    程序员的SQL金典.rar

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    《SQL Server数据库基础》技能测试试卷二

    《SQL Server数据库基础》技能测试试卷二主要涵盖了SQL Server数据库管理系统的基础知识,旨在评估考生对数据库原理、设计、管理和分析的能力。SQL Server是由微软公司开发的一款广泛应用的大型数据库管理系统,对于...

    SQLServer索引调优实践

    ### SQL Server索引调优实践 #### 索引的重要性 在数据库性能优化的过程中,索引扮演着极其重要的角色。不恰当的索引使用会导致其他优化措施的效果大打折扣,甚至变得毫无意义。因此,了解如何正确地创建、管理和...

    SQL从基础到深入——本人心得

    3. 聚合函数:COUNT、SUM、AVG、MAX和MIN等,用于计算一组值的总数、总和、平均值、最大值和最小值。 4. 视图(View):虚拟表,由SELECT语句定义,提供了一种简化复杂查询和保护数据隐私的方式。 5. 存储过程:预...

    数据库试题汇编SQL2000

    - `GROUP BY`: 用于将数据按指定列分组。 - `HAVING`: 与`GROUP BY`一起使用,用于过滤分组后的结果集。 #### 知识点五:DBCC SHRINKDATABASE命令解析 - **知识点概述**: - `DBCC SHRINKDATABASE`命令用于缩小...

    SqlServer使用 case when 解决多条件模糊查询问题

    例如,可以使用`CASE WHEN` 将国家人口数据按洲进行分组,如果知道每个国家所在的洲,可以直接计算各洲的人口总数。如果没有洲的信息,可能需要额外的地理数据或者创建视图来获取这些信息。 总之,`CASE WHEN` 是...

Global site tag (gtag.js) - Google Analytics