哈哈哈123457
2017-08-17 03:19
采纳率: 100%
浏览 830

关于sql的问题 ,一个需求,不会写sql,求大神

已知四张表,第一张为用户表,里面有 小明 id为1,小红 id为2,小王 id为3, 小明 id为4, 小张 id为5这五个人。
第二张为数学作业表,通过用户id,然后用count可以获取每个用户数学作业完成总数,
第三张为语文作业表,通过用户id,然后用count可以获取每个用户语文作业完成总数,
第四张为英语作业表,通过用户id,然后用count可以获取每个用户英语作业完成总数,
现在需要获取五个用户的数学 ,语文, 英语 三门作业完成的总数,然后排出前三名,
返回给后台这三个人的姓名,和完成总数

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 刚起步的程序猿 2017-08-17 03:40
    已采纳

    select 名字,数学完成数+语文完成数+英语完成数 from
    (
    select 名字,数学完成数,语文完成数,英语完成数 from
    (select id,name 名字 from table1 ) a,
    (select id, count(id) 数学完成数 from table2 group by id) b,
    (select id, count(id) 语文完成数 from table2 group by id) c,
    (select id, count(id) 英语完成数 from table2 group by id) d
    where a.id=b.id and a.id=c.id and a.id=d.id
    )
    where rownum<4 order by 2 desc;
    --大概就是这样吧

    打赏 评论
  • 鼠小 2017-08-17 03:30

    给个思路,,你试试,,

    【1】你需要“数学 ,语文, 英语 三门作业完成的总数”需要把二,三,四,表连接,
    【2】对连接结果,进行分组查询,,,
    【3】排序(有相应的关键字)
    【4】取前三(有相应的关键字)
    【5】选择出,,姓名及完成数即可。

    你试试,,有问题还可以追问(临时思考的)。

    打赏 评论
  • Tsui丶 2017-08-17 03:42

    select top 3 u.name, count(m.数学)+count(c.语文)+count(e.英语) from 数学作业 m inner join 英语作业 e inner join 语文作业 c inner join user u where u.Id=e.userId=m.userId=c.userId group by u.id order by count(m.数学)+count(c.语文)+count(e.英语) desc 这个我也没试过 你改下相关数据试下吧

    打赏 评论
  • qq_16435051 2017-08-17 03:48

    select top 3 a.id,b.count as 数学作业完成总数 from 用户表 a join 数学作业表 b on a.id=b.id
    order by a.id,b.count desc

    打赏 评论
  • ChavinKing 2017-09-02 17:15

    select *
    from (select t.name, (m + y + e) as sum
    from (select t1.name,
    (select count(1) from t2 where t1.id = t2.id) as m,
    (select count(1) from t3 where t1.id = t3.id) as y,
    (select count(1) from t4 where t1.id = t4.id) as e
    from t1) t
    order by sum desc)
    where rownum < 4;

    打赏 评论

相关推荐 更多相似问题