V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
karlxu
V2EX  ›  问与答

请教两道 sql server 的题

  •  
  •   karlxu · 2016-11-14 22:27:52 +08:00 · 1613 次点击
    这是一个创建于 2935 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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) 没看懂是什么意思?

    哪位给讲讲?
    谢谢!
    10 条回复    2016-11-17 00:26:43 +08:00
    ipconfiger
        1
    ipconfiger  
       2016-11-14 22:31:39 +08:00
    讲真, 性别的字段别用 sex 了, 太色情了, 用 gender !
    meta
        2
    meta  
       2016-11-15 02:23:53 +08:00 via iPhone   ❤️ 1
    1.为什么每个都要用到,那两个表放的是描述信息,你要显示给人看才会用到,你总不会给人看学号和课程号吧;
    2.c 前面少了个 as 。
    bin456789
        3
    bin456789  
       2016-11-15 03:33:15 +08:00   ❤️ 1
    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
        4
    vibbow  
       2016-11-15 07:25:19 +08:00
    @ipconfiger sex 这个用法有错误么?
    karlxu
        5
    karlxu  
    OP
       2016-11-15 08:23:17 +08:00 via iPhone
    @meta 第一个 from 大写的 SC 后面是不是也少了 as?
    SC as sc
    ebony0319
        6
    ebony0319  
       2016-11-15 08:23:20 +08:00
    @bin456789 三楼正解,写法非常标准。棒!
    heaton_nobu
        7
    heaton_nobu  
       2016-11-15 10:51:32 +08:00
    不用 offset 语句吗
    meta
        8
    meta  
       2016-11-16 23:03:58 +08:00 via iPhone
    我不了解 sql server ,有些 dbms 可以省略 as ,但 sql server 能不能省略我不知道,你说你看不懂那个地方,我的意思是加个 as 你就能看懂了。
    meta
        9
    meta  
       2016-11-16 23:06:55 +08:00 via iPhone
    @bin456789 我不了解 sql server ,难道 sql server 跟 oracle 语法一样。
    bin456789
        10
    bin456789  
       2016-11-17 00:26:43 +08:00
    @meta 我也不了解 oracle 。。。
    sql server 里, as 后面接别名的话, as 是可以省略
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3368 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.