首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个简略的sql查询

2012-09-20 
一个简单的sql查询select id name gradename gradeid brownum age from user得到的结果是id name gradenam

一个简单的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
请大神指点

[解决办法]

SQL code
--> 测试数据:[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*/
[解决办法]
SQL code
select   distinct b.*from  user across apply  (select top 2 * from user where gradeid=t.gradeid order by brownum desc)b
[解决办法]
SQL code
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
[解决办法]
SQL code
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 

热点排行