1. 程式人生 > >sqlzoo習題答案--The join operation

sqlzoo習題答案--The join operation

8.show the name of all players who scored a goal against Germany.HINT

Select goals scored only by non-German players in matches where GER was the id of either team1 or team2.

You can use teamid!='GER' to prevent listing German players.

You can use DISTINCT to stop players being listed twice.

SELECT distinct player
   from goal join game
   on(game.id=goal.matchid)
   where teamid!='GER' and (team1='GER' or team2='GER')

9.Show teamname and the total number of goals scored.

SELECT teamname, count(teamid)
   FROM eteam JOIN goal
   ON eteam.id=goal.teamid
   group BY teamname

11.For every match involving 'POL', show the matchid, date and the number of goals scored.

SELECT matchid,mdate, count(teamid)
   FROM game JOIN goal
   ON (game.id= goal.matchid)
   WHERE (team1 = 'POL' OR team2 = 'POL')
   group by matchid,mdate


12.For every match where 'GER' scored, show matchid, match date and the number of goals scored by 'GER'

select matchid,mdate,count(teamid)
   from game join goal
   on(game.id=goal.matchid)
   where teamid='GER'
   group by matchid,mdate

13.List every match with the goals scored by each team as shown. This will use "

CASE WHEN" which has not been explained in any previous exercises.

mdateteam1score1team2score2
1 July 2012ESP4ITA0
10 June 2012ESP1ITA1
10 June 2012IRL1CRO3
...

Notice in the query given every goal is listed. If it was a team1 goal then a 1 appears in score1, otherwise there is a 0. You could SUM this column to get a count of the goals scored by team1. Sort your result by mdate, matchid, team1 and team2.

SELECT mdate,team1,     
    SUM(CASE  WHEN teamid=team1 THEN 1  
              ELSE 0 END) score1,     
    team2,     
    SUM(CASE  WHEN teamid=team2 THEN 1         
              ELSE 0 END) score2     
    FROM game left JOIN goal ON matchid = id 
    group by mdate, matchid, team1,team2