一个简单的sql查询
select id name gradename gradeid brownum age from user
得到的结果是
id name gradename gradeid brownum age
1 张三 一年级 1 11 7
8 张四 二年级 2 16 8
2 张五 二年级 2 17 7
4 张六 四年级 4 16 9
6 张七 三年级 3 18 7
5 张八 二年级 2 19 9
3 张九 四年级 4 21 10
7 张十 一年级 1 41 7
9 李一 一年级 1 71 7
10 李二 三年级 3 99 7
11 李四 四年级 4 88 10
我想要的结果是 根据年级和点击率排序 只要每个学年的前两名brow最高 结果是
9 李一 一年级 1 71 7
7 张十 一年级 1 41 7
5 张八 二年级 1 19 9
2 张五 二年级 2 17 7
10 李二 三年级 3 99 7
6 张七 三年级 3 18 7
11 李四 四年级 4 88 10
3 张九 四年级 4 21 10
请大神指点
[解决办法]
--> 测试数据:[test]if object_id('[test]') is not null drop table [test]go create table [test]([id] int,[name] varchar(4),[gradename] varchar(6),[gradeid] int,[brownum] int,[age] int)insert [test]select 1,'张三','一年级',1,11,7 union allselect 8,'张四','二年级',2,16,8 union allselect 2,'张五','二年级',2,17,7 union allselect 4,'张六','四年级',4,16,9 union allselect 6,'张七','三年级',3,18,7 union allselect 5,'张八','二年级',2,19,9 union allselect 3,'张九','四年级',4,21,10 union allselect 7,'张十','一年级',1,41,7 union allselect 9,'李一','一年级',1,71,7 union allselect 10,'李二','三年级',3,99,7 union allselect 11,'李四','四年级',4,88,10goselect * from test awhere [brownum]=(select top 2 [brownum] from test b where a.[name]=b.[name] order by [brownum] desc)/*1 张三 一年级 1 11 78 张四 二年级 2 16 82 张五 二年级 2 17 74 张六 四年级 4 16 96 张七 三年级 3 18 75 张八 二年级 2 19 93 张九 四年级 4 21 107 张十 一年级 1 41 79 李一 一年级 1 71 710 李二 三年级 3 99 711 李四 四年级 4 88 10*/
[解决办法]
select distinct b.*from user across apply (select top 2 * from user where gradeid=t.gradeid order by brownum desc)b
[解决办法]
select id,name,gradename,gradeid,brownum,age from( select row_number() over(partition by gradeid order by brownum desc) rn,* from ( select id name gradename gradeid brownum age from user )t)ttwhere tt.rn<=2
[解决办法]
select * from test awhere [brownum]IN (select top 2 [brownum] from test b where a.[gradename]=b.[gradename] order by [brownum] desc)ORDER BY [gradename] ,[brownum] DESC