当前位置:Gxlcms > mysql > sql数据分组(GROUPBY)最大值,第一条,前三条实例

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

时间:2021-07-01 10:21:17 帮助过:630人阅读

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

取分组前三第记录

代码如下

SELECT 课程,
SUM(奖金) AS 奖金
FROM ( SELECT 课程,
学号,
成绩
FROM 考试 AS a
WHERE ( SELECT COUNT(*)
FROM 考试
WHERE 课程 = a.课程
AND 学号 <> a.学号
AND 成绩 > a.成绩
) < 3
) 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

人气教程排行