sql分块解决一个复杂问题的示例


问题:
    大学生春季运动会的数据库,保存了比赛信息的三个表如下:
        运动员 sporter(运动员编号 sporterid,姓名name,性别 sex,所属系号 department),
        项目 item(项目编号 itemid,名称 itemname,比赛地点 location),
        成绩 grade(运动员编号 id,项目编号 itemid,积分 mark)。
    用SQL语句完成在“体育馆”进行比赛的各项目名称及其冠军的姓名

分块解决步骤:
    1,首先找出在“体育馆”中进行的比赛项目id;
        SELECT itemid
        FROM item
        WHERE location='体育馆'
    2,然后在成绩表中根据项目id进行分组后找出单个项目最高分;
        SELECT itemid iid,MAX(mark) max 
        FROM grade 
        WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') //条件限制地点在体育馆
        GROUP BY itemid
    3,接下来将上面含有项目id和项目最高分信息的表与另外三张表连接;
        grade g, (上面含有项目最高分信息的表) temp, item i,sporter s 
        WHERE g.itemid=temp.iid 
        AND g.mark=temp.max 
        AND temp.iid=i.itemid 
        AND s.sporterid=g.sporterid
    4,最后按要求从连接后的表中选出项目名称和冠军姓名。
        SELECT i.itemname,s.name 
        FROM (以上连接后的表)

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1