每日一题-62(查询球队积分)

题62:

根据下表写出一条SQL语句以查询每个队的 team_id,team_name 和 num_points。结果根据 num_points 降序排序,如果有两队积分相同,那么这两队按 team_id 升序排序。

积分要求:

(1)赢一场得三分;

(2)平一场得一分;

(3)输一场不得分。

其中:

Teams表:主键是 team_id,表中的每一行都代表一支独立足球队;Matches表:主键是 match_id,表中的每一行都代表一场已结束的比赛,比赛的主客队分别由它们自己的 id 表示,他们的进球由 host_goals 和 guest_goals 分别表示。

解题思路:

(1)求出比赛中主场球队的分数;

select host_team team_id,

sum(case

when host_goals>guest_goals then 3

when host_goals

else 1

end) score

from matches

group by host_team

(2)求出比赛中客场球队的分数,然后用union all合并第一步;

select guest_team team_id,

sum(case

when host_goals>guest_goals then 0

when host_goals

else 1

end) score

from matches

group by guest_team

(3)此时联合查询查出来的表是参赛的所有球队的总分,没参赛的也要算,所以这里用外连接;

(4)排序,具体代码如下:

select t.team_id, t.team_name, IFNULL(score,0) num_points

from

(

select team_id, SUM(score) score

from (

select host_team team_id,

sum(case

when host_goals>guest_goals then 3

when host_goals

else 1

end) score

from matches

group by host_team

union all

select guest_team team_id,

sum(case

when host_goals>guest_goals then 0

when host_goals

else 1

end) score

from matches

group by guest_team

) b

group by team_id

) a

right join teams t on t.team_id=a.team_id

order by num_points desc, t.team_id;

斯诺克半决赛打几局
百年足球巨星盘点 全球十大传奇球员的辉煌与传奇故事
Copyright © 2022 02年世界杯冠军|世界杯 巴西|168快赢世界杯速报站|168kuaiyin.com All Rights Reserved.