表user
select id,name,gradetypeid,brownum,age,meteid from [user]
结果
1 张三 1 11 7 1
8 张四 2 16 8 2
2 张五 2 17 7 3
4 张六 3 16 9 4
6 张七 3 18 7 5
5 张八 2 19 9 6
3 张九 2 21 10 7
7 张十 3 41 7 8
9 李一 1 71 7 9
10 李二 3 99 7 10
11 李四 1 88 10 11
表grade
select id, gradename,gradeid,gradetypeid,gradetypename,meteid from [grade]
结果
1 一年级 1 1 小学 1
8 二年级 2 2 初中 2
2 二年级 2 2 初中 3
4 四年级 4 3 高中 4
6 三年级 3 3 高中 5
5 二年级 2 2 初中 6
3 四年级 4 2 初中 7
7 一年级 1 3 高中 8
9 一年级 1 1 小学 9
10 三年级 3 3 高中 10
11 四年级 4 1 小学 11
两个表关联 meteid = meteid gradetypeid=gradetypeid
想通过两个表联查得到结果 :根据年级和点击率排序 只要每个学年的前两名brow最高
id name gradename gradetypeid brownum age
9 李一 一年级 1 71 7
7 张十 一年级 1 41 7
5 张八 二年级 2 19 9
2 张五 二年级 2 17 7
10 李二 三年级 3 99 7
6 张七 三年级 3 18 7
11 李四 四年级 4 88 10
3 张九 四年级 4 21 10
------解决方案--------------------
lz可以参考下t-sql的排名函数
关联得出结果后 n=rownumber() 0ver(partition by 年级 order by 点击 desc )
然后筛选where n<=2的记录
------解决方案--------------------
- SQL code
-->try;with t1 as( select id,name,gradetypeid,brownum,age,meteid from [user]),t2 as( select id, gradename,gradeid,gradetypeid,gradetypename,meteid from [grade])select c.gradename,a.* from t1 a,t2 cwhere [brownum]IN (select top 2 [brownum] from t1 b where a.[gradename]=b.[gradename] order by [brownum] desc)and a.id=c.idORDER BY [gradename] ,[brownum] DESC
------解决方案--------------------
- SQL code
WITH cte1 AS(SELECT id, name, gradetypeid, brownum, age, meteid FROM [user]),cte2 AS(SELECT id, gradename, gradeid, gradetypeid, gradetypename, meteid FROM [grade])SELECT c.gradename, a.*FROM cte1 a, cte2 cWHERE [brownum] IN (SELECT top 2 [brownum] FROM cte1 b WHERE a.[gradename] = b.[gradename] ORDER BY [brownum] DESC) AND a.id = c.idORDER BY [gradename], [brownum] DESC
------解决方案--------------------
- SQL code
CREATE TABLE User1(id int,name varchar(10),gradetypeid int,brownum int,age int,meteid int)INSERT INTO User1SELECT 1,'张三',1,11,7,1 UNION ALLSELECT 8,'张四',2,16,8, 2 UNION ALLSELECT 2,'张五',2,17,7, 3 UNION ALLSELECT 4 ,'张六',3,16,9, 4 UNION ALLSELECT 6 ,'张七',3,18,7, 5 UNION ALLSELECT 5 ,'张八',2,19,9, 6 UNION ALLSELECT 3 ,'张九',2,21,10,7 UNION ALLSELECT 7 ,'张十',3,41,7, 8 UNION ALLSELECT 9 ,'李一',1,71,7, 9 UNION ALLSELECT 10,'李二',3,99,7, 10 UNION ALLSELECT 11,'李四',1,88,10, 11CREATE TABLE User2(id int, gradename varchar(10),gradeid int,gradetypeid int,gradetypename varchar(10),meteid int)INSERT INTO User2SELECT 1,'一年级',1 ,1 ,'小学', 1 UNION ALLSELECT 8,'二年级', 2 ,2 ,'初中', 2 UNION ALLSELECT 2,'二年级', 2 ,2 ,'初中', 3 UNION ALL SELECT 4,'四年级', 4 ,3 ,'高中', 4 UNION ALLSELECT 6,'三年级', 3 ,3 ,'高中', 5 UNION ALLSELECT 5,'二年级', 2 ,2 ,'初中', 6 UNION ALLSELECT 3,'四年级', 4 ,2 ,'初中', 7 UNION ALLSELECT 7,'一年级', 1 ,3 ,'高中', 8 UNION ALLSELECT 9,'一年级', 1 ,1 ,'小学', 9 UNION ALLSELECT 10,'三年级', 3 ,3 ,'高中', 10 UNION ALLSELECT 11,'四年级', 4 ,1 ,'小学', 11select * from (SELECT ROW_NUMBER() OVER (partition by T0.gradename ORDER BY bROWnUM DESC) ids,T0.id,name,gradename,T1.gradetypeid,brownum,age FROM User2 T0 LEFT JOIN User1 T1 ON T0.id = T1.id ) A0where ids<=2order by brownum/*ids id name gradename gradetypeid brownum age-------------------- ----------- ---------- ---------- ----------- ----------- -----------2 2 张五 二年级 2 17 72 6 张七 三年级 3 18 71 5 张八 二年级 2 19 92 3 张九 四年级 2 21 102 7 张十 一年级 3 41 71 9 李一 一年级 1 71 71 11 李四 四年级 1 88 101 10 李二 三年级 3 99 7(8 行受影响)*/