请教两道 sql server 的题

2016-11-14 22:27:52 +08:00
 karlxu
1 )表:
Student ( Sid , sname, Sage, Ssex); 学生表
Course (Cid, Cname, Tid); 课程表
SC (Sid, Cid, Score); 成绩表
求:查询每门功课成绩最好的前三名

2 )存在 SQL SERVER 数据表 T(a,b,c,d),要根据字段 c 排序后取第 11 — 20 条记录显示,求 sql server 的语句

然后 Google 了一下:
1 ) select sc.Sid, sc.Cid, sc.score
from SC sc
where score in (
select top 3 score
from SC
where sc.Cid = Cid
order by score desc)
order by sc.Cid;
这个好像没 course 表什么事儿,感觉不太对。。。

2 )
select * from (select c.*,rownum as rn from (select * from t order by c desc) c)
where rn between 21 and 30;
这里的 第一行最后的 c) 没看懂是什么意思?

哪位给讲讲?
谢谢!
1564 次点击
所在节点    问与答
10 条回复
ipconfiger
2016-11-14 22:31:39 +08:00
讲真, 性别的字段别用 sex 了, 太色情了, 用 gender !
meta
2016-11-15 02:23:53 +08:00
1.为什么每个都要用到,那两个表放的是描述信息,你要显示给人看才会用到,你总不会给人看学号和课程号吧;
2.c 前面少了个 as 。
bin456789
2016-11-15 03:33:15 +08:00
1:
WITH a AS ( SELECT dbo.student.sname ,
dbo.course.cname ,
dbo.SC.score ,
RANK() OVER ( PARTITION BY dbo.SC.cid ORDER BY score DESC ) AS rank
FROM SC
INNER JOIN course ON SC.cid = dbo.course.cid
INNER JOIN student ON student.sid = dbo.SC.sid
)
SELECT *
FROM a
WHERE rank <= 3;



2:
WITH a AS ( SELECT * ,
ROW_NUMBER() OVER ( ORDER BY c ) AS num
FROM dbo.T
)
SELECT *
FROM a
WHERE num >= 11
AND num <= 20;
vibbow
2016-11-15 07:25:19 +08:00
@ipconfiger sex 这个用法有错误么?
karlxu
2016-11-15 08:23:17 +08:00
@meta 第一个 from 大写的 SC 后面是不是也少了 as?
SC as sc
ebony0319
2016-11-15 08:23:20 +08:00
@bin456789 三楼正解,写法非常标准。棒!
heaton_nobu
2016-11-15 10:51:32 +08:00
不用 offset 语句吗
meta
2016-11-16 23:03:58 +08:00
我不了解 sql server ,有些 dbms 可以省略 as ,但 sql server 能不能省略我不知道,你说你看不懂那个地方,我的意思是加个 as 你就能看懂了。
meta
2016-11-16 23:06:55 +08:00
@bin456789 我不了解 sql server ,难道 sql server 跟 oracle 语法一样。
bin456789
2016-11-17 00:26:43 +08:00
@meta 我也不了解 oracle 。。。
sql server 里, as 后面接别名的话, as 是可以省略

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX