`
04023129
  • 浏览: 161767 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

分组取最大

Go 
阅读更多
--按某一字段分组取最大(小)值所在行的数据(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
*/

--六、按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 desc) 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          2           a2(a的第二个值)
a          3           a3:a的第三个值
b          4           b4b4
b          5           b5b5b5b5b5
*/
 
分享到:
评论

相关推荐

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

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

    Linq与Lambda分组语法取泛型数组某列的最小/大值

    使用Linq语法与Lambda表达式分组取泛型数组某列的最小值/最大值

    java1.8 中 stream 的 groupingBy 最大值、最小值分组

    主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval 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 ...

    js实现json数组分组合并操作示例

    本示例探讨的是如何使用JavaScript实现JSON数组的分组合并操作,这对于数据处理和分析尤其有用。下面将详细解释这个示例中的关键知识点。 1. **遍历JSON数组**: 在示例中,我们首先通过`for`循环遍历输入的JSON...

    MySql实现分组取n条最大记录.txt

    本篇文章详细介绍了如何使用MySQL实现分组取n条最大记录的功能。通过精心设计的SQL查询语句,我们可以有效地解决这类问题。这种方法不仅适用于上述具体场景,还可以扩展应用于其他类似的需求,例如按不同标准分组并...

    mysql获取分组后每组的最大值实例详解

    在MySQL中,获取分组后每组的最大值是一项常见的数据分析任务,这通常涉及到聚合函数和分组查询。本文将详细讲解如何使用SQL语句来实现这个功能,通过一个具体的实例来帮助理解。 首先,我们创建了一个名为`test`的...

    pandas获取groupby分组里最大值所在的行方法

    pandas获取groupby分组里最大值所在的行方法 如下面这个DataFrame,按照Mt分组,取出Count最大的那行 import pandas as pd df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','...

    对某一字段分组后,取出另一字段最大值的所有记录

    表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录

    搜集大乌龟,诌老大的sql经典

    要按`name`分组取最大`val`值所在行的数据,有以下五种常见方法: 1. **子查询关联法**: ```sql select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name; ``` 这种...

    oracle数据库函数及其使用实例.sql

    该脚本包含递归查询、删除数据表中重复数据、分组取最大记录,行列互转、多行合并等不常见但是非常实用的oracle函数并附带详细的实例持续更新中

    取SQL分组中的某几行数据.docx

    ##### 取分组中前N行(排名前几名) 假设我们需要取出每个`UserID`下`OrderID`排名前两名的数据,可以这样实现: ```sql SELECT ID, UserID, OrderID FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY UserID ...

    Java开发关于正态分布的等距分组

    3. 根据最小值和最大值确定整个数据集的范围,然后根据分组数目计算组距。 4. 对数据集进行迭代,根据确定的组距将数据分配到对应的分组中。 在实际编程实现过程中,可能需要使用Java的基础类库如Math类来计算均值...

    如何制作排名前N名的分组报表

    这可以帮助决策者快速了解各个分类中的关键数据,比如销售额最高的产品、利润最大的部门等。Style Report是一款强大的报表软件,它提供了高效且准确的工具来满足这种需求。以下是使用Style Report制作排名前N名分组...

    MSSQL 多字段根据范围求最大值实现方法

    4. 使用`GROUP BY [col1]`按`Col1`字段进行分组,对每个分组取`MAX([col2])`作为最大值。 示例代码如下: ```sql DECLARE @T TABLE ([Col1] INT, [Col2] INT, [Col3] INT, [Col4] INT, [Col5] INT, [Col6] INT, ...

    深入理解Linux,深入理解Linux

    根据提供的标题、描述和标签,我们可以深入探讨与“深入理解Linux”相关的重要知识点。由于给定的部分内容并未提供实质性的信息,以下将集中讨论Linux的基础概念、核心特性以及一些高级主题。 ...

    java8 stream自定义分组求和并排序的实现

    Java8 Stream 自定义分组求和并排序的实现 Java8 Stream 自定义分组求和并排序的实现是 Java8 中一个非常重要的知识点,该知识点的实现可以帮助开发者快速地实现分组求和并排序的操作,从而提高开发效率和代码质量...

Global site tag (gtag.js) - Google Analytics