SQL Exercise: Teams that scored only one goal to the torunament
16. From the following tables, write a SQL query to find the teams that have scored one goal in the tournament. Return country_name as "Team", team in the group, goal_for.
Sample table: soccer_team
 team_id | team_group | match_played | won | draw | lost | goal_for | goal_agnst | goal_diff | points | group_position
---------+------------+--------------+-----+------+------+----------+------------+-----------+--------+----------------
    1201 | A          |            3 |   1 |    0 |    2 |        1 |          3 |        -2 |      3 |              3
    1202 | F          |            3 |   0 |    1 |    2 |        1 |          4 |        -3 |      1 |              4
    1203 | E          |            3 |   2 |    0 |    1 |        4 |          2 |         2 |      6 |              2
    1204 | D          |            3 |   2 |    1 |    0 |        5 |          3 |         2 |      7 |              1
    1205 | D          |            3 |   0 |    1 |    2 |        2 |          5 |        -3 |      1 |              4
    1206 | B          |            3 |   1 |    2 |    0 |        3 |          2 |         1 |      5 |              2
    1207 | A          |            3 |   2 |    1 |    0 |        4 |          1 |         3 |      7 |              1
    1208 | C          |            3 |   2 |    1 |    0 |        3 |          0 |         3 |      7 |              1
    1209 | F          |            3 |   1 |    2 |    0 |        6 |          4 |         2 |      5 |              1
    1210 | F          |            3 |   1 |    2 |    0 |        4 |          3 |         1 |      5 |              2
    1211 | E          |            3 |   2 |    0 |    1 |        3 |          1 |         2 |      6 |              1
    1212 | C          |            3 |   1 |    0 |    2 |        2 |          2 |         0 |      3 |              3
    1213 | C          |            3 |   2 |    1 |    0 |        2 |          0 |         2 |      7 |              2
    1214 | F          |            3 |   0 |    3 |    0 |        4 |          4 |         0 |      3 |              3
    1215 | E          |            3 |   1 |    1 |    1 |        2 |          4 |        -2 |      4 |              3
    1216 | A          |            3 |   0 |    1 |    2 |        2 |          4 |        -2 |      1 |              4
    1217 | B          |            3 |   0 |    1 |    2 |        2 |          6 |        -4 |      1 |              4
    1218 | B          |            3 |   1 |    1 |    1 |        3 |          3 |         0 |      4 |              3
    1219 | D          |            3 |   2 |    0 |    1 |        5 |          2 |         3 |      6 |              2
    1220 | E          |            3 |   0 |    1 |    2 |        1 |          3 |        -2 |      1 |              4
    1221 | A          |            3 |   1 |    2 |    0 |        2 |          1 |         1 |      5 |              2
    1222 | D          |            3 |   1 |    0 |    2 |        2 |          4 |        -2 |      3 |              3
    1223 | C          |            3 |   0 |    0 |    3 |        0 |          5 |        -5 |      0 |              4
    1224 | B          |            3 |   2 |    0 |    1 |        6 |          3 |         3 |      6 |              1
Sample table: soccer_country
 country_id | country_abbr |    country_name
------------+--------------+---------------------
       1201 | ALB          | Albania
       1202 | AUT          | Austria
       1203 | BEL          | Belgium
       1204 | CRO          | Croatia
       1205 | CZE          | Czech Republic
       1206 | ENG          | England
       1207 | FRA          | France
       1208 | GER          | Germany
       1209 | HUN          | Hungary
       1210 | ISL          | Iceland
       1211 | ITA          | Italy
       1212 | NIR          | Northern Ireland
       1213 | POL          | Poland
       1214 | POR          | Portugal
       1215 | IRL          | Republic of Ireland
       1216 | ROU          | Romania
       1217 | RUS          | Russia
       1218 | SVK          | Slovakia
       1219 | ESP          | Spain
       1220 | SWE          | Sweden
       1221 | SUI          | Switzerland
       1222 | TUR          | Turkey
       1223 | UKR          | Ukraine
       1224 | WAL          | Wales
       1225 | SLO          | Slovenia
       1226 | NED          | Netherlands
       1227 | SRB          | Serbia
       1228 | SCO          | Scotland
       1229 | NOR          | Norway
Sample Solution:
SQL Code:
-- Selecting country_name (aliased as "Team"), team_group, and goal_for from soccer_team
SELECT country_name as "Team" , team_group, goal_for
-- From clause with JOIN between soccer_team and soccer_country
FROM soccer_team
JOIN soccer_country 
-- Joining soccer_team and soccer_country based on team_id and country_id
ON soccer_team.team_id = soccer_country.country_id
-- Condition for filtering results where goal_for is equal to 1
AND goal_for = 1;
Sample Output:
Team | team_group | goal_for ---------+------------+---------- Albania | A | 1 Austria | F | 1 Sweden | E | 1 (3 rows)
Code Explanation:
The said query  in SQL that returns a list of all teams that scored only 1 goal, along with their team group and country name  from the tables 'soccer_team' and 'soccer_country'.
The JOIN clause is used to combine the two tables  where the team ID from the 'soccer_team' table matches the country ID from the 'soccer_country' table.
The WHERE clause filters the results to include only those rows where the number of goals scored is equal to 1.
Alternative Solutions:
Using a Subquery:
-- Selecting country_name (aliased as "Team"), team_group, and goal_for from soccer_team
SELECT country_name as "Team", team_group, goal_for
-- From clause with JOIN between soccer_team and soccer_country
FROM soccer_team
JOIN soccer_country ON soccer_team.team_id = soccer_country.country_id
-- Where clause with a subquery to filter results based on teams with goal_for equal to 1
WHERE team_id IN (
    -- Subquery to select team_id from soccer_team where goal_for is equal to 1
    SELECT team_id
    FROM soccer_team
    WHERE goal_for = 1
);
Explanation:
This query uses a subquery to find the team_id values where goal_for is 1. It then uses these team_id values to filter the main query.
Using a JOIN with Filter:
-- Selecting country_name (aliased as "Team"), team_group, and goal_for from soccer_team
SELECT country_name as "Team", team_group, goal_for
-- From clause with JOIN between soccer_team and soccer_country
FROM soccer_team
JOIN soccer_country ON soccer_team.team_id = soccer_country.country_id
-- Where clause with conditions to filter results based on goal_for values
WHERE goal_for = 1
  -- Additional condition to ensure the goal_for value in soccer_team is also equal to 1
  AND soccer_team.goal_for = 1;
Explanation:
This query combines the JOIN condition with the WHERE clause to filter the results. Both conditions ensure that goal_for is 1.
Go to:
PREV : Which player was the first to be sent off at Euro 2016.
NEXT : Find the yellow cards received by each country.
Practice Online
Sample Database: soccer

Have another way to solve this solution? Contribute your code (and comments) through Disqus.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
