Home  >  Article  >  Database  >  sql数据分组(GROUP BY)最大值,第一条,前三条实例

sql数据分组(GROUP BY)最大值,第一条,前三条实例

WBOY
WBOYOriginal
2016-06-07 17:49:283272browse

sql数据分组最大值,第一条,前三条方法总结,三个实例都比较简单都是根据GROUP BY出来的数据进行一些简单操作即可,有需要的同学可参考一下.

取分组前三第记录

 代码如下 复制代码

SELECT  课程,
        SUM(奖金) AS 奖金
FROM    ( SELECT    课程,
                    学号,
                    成绩
          FROM      考试 AS a
          WHERE     ( SELECT    COUNT(*)
                      FROM      考试
                      WHERE     课程 = a.课程
                                AND 学号 a.学号
                                AND 成绩 > a.成绩
                    )         ) AS b
GROUP BY 课程

取分组第一第记录

表Demo的数据都是字符串类型,按照顺序的时间Time(也是字符串)排序的记录如下:

Num Name Time
1 a 2009/05/01
1 a 2009/05/02
1 a 2009/05/03
2 b 2009/05/04
2 b 2009/05/05
3 c 2009/05/06
3 c 2009/05/07
5 e 2009/05/08
1 a 2009/05/09
1 a 2009/05/10

我想输出类似按照Num分组的每组的第一条数据记录,比如上面的记录我想操作后得到如下记录:
Num Name Time
1 a 2009/05/01
2 b 2009/05/04
3 c 2009/05/06
5 e 2009/05/08
1 a 2009/05/09

sql代码

 代码如下 复制代码

declare @Tab table
(Num int, Name varchar(2),   Time DATETIME)
insert into @tab select 1    ,'a',        '2009/05/01'
insert into @tab select 1    ,'a',        '2009/05/02'
insert into @tab select 1    ,'a',        '2009/05/03'
insert into @tab select 2    ,'b',        '2009/05/04'
insert into @tab select 2    ,'b',        '2009/05/05'
insert into @tab select 3    ,'c',        '2009/05/06'
insert into @tab select 3    ,'c',        '2009/05/07'
insert into @tab select 5    ,'e',        '2009/05/08'
insert into @tab select 1    ,'a',        '2009/05/09'
insert into @tab select 1    ,'a',        '2009/05/10'

select  * from @Tab t where  not exists(select 1 from @Tab where num=t.num and [time]

/*
Num         Name Time
----------- ---- -----------------------
1           a    2009-05-01 00:00:00.000
2           b    2009-05-04 00:00:00.000
3           c    2009-05-06 00:00:00.000
5           e    2009-05-08 00:00:00.000

(4 行受影响)
*/


取分组最大记录


示例:test 表 a b c
  
  1 5 abc
  2 6 bcd
  1 7 ade
  2 8 adc
  若取按a列分组后,b列最大,的所有列的记录:
  
  result a b c
  1 6 bcd
  2 8 adc
  可以使用如下语句:
  

 代码如下 复制代码
  select * from test where b in (select max(id) from test group by a)
  适用于所有数据库:
  
  select t1.a,t1.b,t1.c
  from test t1
  inner join
  (seelct a,max(b) as b from test group by a) t2
  on t1.a=t2.a and t1.b=t2.b
  
  适用于所有数据库:
  
  select a,b,c
  from(
  select a,b,c
  ,row_number()over(partition by a order by b desc) rn
  from test
  )
  where rn=1
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn