w3resource

SQL Exercise: Find the venue with number of goals that has seen

SQL soccer Database: Joins Exercise-18 with Solution

18. From the following tables, write a SQL query to count the number of goals that have been seen. Return venue name and number of goals.

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 table: goal_details
 goal_id | match_no | player_id | team_id | goal_time | goal_type | play_stage | goal_schedule | goal_half
---------+----------+-----------+---------+-----------+-----------+------------+---------------+-----------
       1 |        1 |    160159 |    1207 |        57 | N         | G          | NT            |         2
       2 |        1 |    160368 |    1216 |        65 | P         | G          | NT            |         2
       3 |        1 |    160154 |    1207 |        89 | N         | G          | NT            |         2
       4 |        2 |    160470 |    1221 |         5 | N         | G          | NT            |         1
       5 |        3 |    160547 |    1224 |        10 | N         | G          | NT            |         1
       6 |        3 |    160403 |    1218 |        61 | N         | G          | NT            |         2
       7 |        3 |    160550 |    1224 |        81 | N         | G          | NT            |         2
       8 |        4 |    160128 |    1206 |        73 | N         | G          | NT            |         2
       9 |        4 |    160373 |    1217 |        93 | N         | G          | ST            |         2
      10 |        5 |    160084 |    1204 |        41 | N         | G          | NT            |         1
      11 |        6 |    160298 |    1213 |        51 | N         | G          | NT            |         2
      12 |        7 |    160183 |    1208 |        19 | N         | G          | NT            |         1
      13 |        7 |    160180 |    1208 |        93 | N         | G          | ST            |         2
      14 |        8 |    160423 |    1219 |        87 | N         | G          | NT            |         2
      15 |        9 |    160335 |    1215 |        48 | N         | G          | NT            |         2
      16 |        9 |    160327 |    1215 |        71 | O         | G          | NT            |         2
      17 |       10 |    160244 |    1211 |        32 | N         | G          | NT            |         1
      18 |       10 |    160252 |    1211 |        93 | N         | G          | ST            |         2
      19 |       11 |    160207 |    1209 |        62 | N         | G          | NT            |         2
      20 |       11 |    160200 |    1209 |        87 | N         | G          | NT            |         2
      21 |       12 |    160320 |    1214 |        31 | N         | G          | NT            |         1
      22 |       12 |    160221 |    1210 |        50 | N         | G          | NT            |         2
      23 |       13 |    160411 |    1218 |        32 | N         | G          | NT            |         1
      24 |       13 |    160405 |    1218 |        45 | N         | G          | NT            |         1
      25 |       13 |    160380 |    1217 |        80 | N         | G          | NT            |         2
      26 |       14 |    160368 |    1216 |        18 | P         | G          | NT            |         1
      27 |       14 |    160481 |    1221 |        57 | N         | G          | NT            |         2
      28 |       15 |    160160 |    1207 |        90 | N         | G          | NT            |         2
      29 |       15 |    160154 |    1207 |        96 | N         | G          | ST            |         2
      30 |       16 |    160547 |    1224 |        42 | N         | G          | NT            |         1
      31 |       16 |    160138 |    1206 |        56 | N         | G          | NT            |         2
      32 |       16 |    160137 |    1206 |        93 | N         | G          | ST            |         2
      33 |       17 |    160262 |    1212 |        49 | N         | G          | NT            |         2
      34 |       17 |    160275 |    1212 |        96 | N         | G          | ST            |         2
      35 |       19 |    160248 |    1211 |        88 | N         | G          | NT            |         2
      36 |       20 |    160085 |    1204 |        37 | N         | G          | NT            |         1
      37 |       20 |    160086 |    1204 |        59 | N         | G          | NT            |         2
      38 |       20 |    160115 |    1205 |        76 | N         | G          | NT            |         2
      39 |       20 |    160114 |    1205 |        89 | P         | G          | NT            |         2
      40 |       21 |    160435 |    1219 |        34 | N         | G          | NT            |         1
      41 |       21 |    160436 |    1219 |        37 | N         | G          | NT            |         1
      42 |       21 |    160435 |    1219 |        48 | N         | G          | NT            |         2
      43 |       22 |    160067 |    1203 |        48 | N         | G          | NT            |         2
      44 |       22 |    160064 |    1203 |        61 | N         | G          | NT            |         2
      45 |       22 |    160067 |    1203 |        70 | N         | G          | NT            |         2
      46 |       23 |    160224 |    1210 |        40 | P         | G          | NT            |         1
      47 |       23 |    160216 |    1210 |        88 | O         | G          | NT            |         2
      48 |       25 |    160023 |    1201 |        43 | N         | G          | NT            |         1
      49 |       27 |    160544 |    1224 |        11 | N         | G          | NT            |         1
      50 |       27 |    160538 |    1224 |        20 | N         | G          | NT            |         1
      51 |       27 |    160547 |    1224 |        67 | N         | G          | NT            |         2
      52 |       29 |    160287 |    1213 |        54 | N         | G          | NT            |         2
      53 |       30 |    160182 |    1208 |        30 | N         | G          | NT            |         1
      54 |       31 |    160504 |    1222 |        10 | N         | G          | NT            |         1
      55 |       31 |    160500 |    1222 |        65 | N         | G          | NT            |         2
      56 |       32 |    160435 |    1219 |         7 | N         | G          | NT            |         1
      57 |       32 |    160089 |    1204 |        45 | N         | G          | NT            |         1
      58 |       32 |    160085 |    1204 |        87 | N         | G          | NT            |         2
      59 |       33 |    160226 |    1210 |        18 | N         | G          | NT            |         1
      60 |       33 |    160042 |    1202 |        60 | N         | G          | NT            |         2
      61 |       33 |    160226 |    1210 |        94 | N         | G          | ST            |         2
      62 |       34 |    160203 |    1209 |        19 | N         | G          | NT            |         1
      63 |       34 |    160320 |    1214 |        42 | N         | G          | NT            |         1
      64 |       34 |    160202 |    1209 |        47 | N         | G          | NT            |         2
      65 |       34 |    160322 |    1214 |        50 | N         | G          | NT            |         2
      66 |       34 |    160202 |    1209 |        55 | N         | G          | NT            |         2
      67 |       34 |    160322 |    1214 |        62 | N         | G          | NT            |         2
      68 |       35 |    160333 |    1215 |        85 | N         | G          | NT            |         2
      69 |       36 |    160063 |    1203 |        84 | N         | G          | NT            |         2
      70 |       37 |    160287 |    1213 |        39 | N         | R          | NT            |         1
      71 |       37 |    160476 |    1221 |        82 | N         | R          | NT            |         2
      72 |       38 |    160262 |    1212 |        75 | O         | R          | NT            |         2
      73 |       39 |    160321 |    1214 |       117 | N         | R          | ET            |         2
      74 |       40 |    160333 |    1215 |         2 | P         | R          | NT            |         1
      75 |       40 |    160160 |    1207 |        58 | N         | R          | NT            |         2
      76 |       40 |    160160 |    1207 |        61 | N         | R          | NT            |         2
      77 |       41 |    160165 |    1208 |         8 | N         | R          | NT            |         1
      78 |       41 |    160182 |    1208 |        43 | N         | R          | NT            |         1
      79 |       41 |    160173 |    1208 |        63 | N         | R          | NT            |         2
      80 |       42 |    160050 |    1203 |        10 | N         | R          | NT            |         1
      81 |       42 |    160065 |    1203 |        78 | N         | R          | NT            |         2
      82 |       42 |    160062 |    1203 |        80 | N         | R          | NT            |         2
      83 |       42 |    160058 |    1203 |        90 | N         | R          | NT            |         2
      84 |       43 |    160236 |    1211 |        33 | N         | R          | NT            |         1
      85 |       43 |    160252 |    1211 |        91 | N         | R          | ST            |         2
      86 |       44 |    160136 |    1206 |         4 | P         | R          | NT            |         1
      87 |       44 |    160219 |    1210 |         6 | N         | R          | NT            |         1
      88 |       44 |    160230 |    1210 |        18 | N         | R          | NT            |         1
      89 |       45 |    160297 |    1213 |         2 | N         | Q          | NT            |         1
      90 |       45 |    160316 |    1214 |        33 | N         | Q          | NT            |         1
      91 |       46 |    160063 |    1203 |        13 | N         | Q          | NT            |         1
      92 |       46 |    160539 |    1224 |        31 | N         | Q          | NT            |         1
      93 |       46 |    160550 |    1224 |        55 | N         | Q          | NT            |         2
      94 |       46 |    160551 |    1224 |        86 | N         | Q          | NT            |         2
      95 |       47 |    160177 |    1208 |        65 | N         | Q          | NT            |         2
      96 |       47 |    160235 |    1211 |        78 | P         | Q          | NT            |         2
      97 |       48 |    160159 |    1207 |        12 | N         | Q          | NT            |         1
      98 |       48 |    160155 |    1207 |        20 | N         | Q          | NT            |         1
      99 |       48 |    160154 |    1207 |        43 | N         | Q          | NT            |         1
     100 |       48 |    160160 |    1207 |        45 | N         | Q          | NT            |         1
     101 |       48 |    160230 |    1210 |        56 | N         | Q          | NT            |         2
     102 |       48 |    160159 |    1207 |        59 | N         | Q          | NT            |         2
     103 |       48 |    160221 |    1210 |        84 | N         | Q          | NT            |         2
     104 |       49 |    160322 |    1214 |        50 | N         | S          | NT            |         2
     105 |       49 |    160320 |    1214 |        53 | N         | S          | NT            |         2
     106 |       50 |    160160 |    1207 |        47 | P         | S          | ST            |         1
     107 |       50 |    160160 |    1207 |        72 | N         | S          | NT            |         2
     108 |       51 |    160319 |    1214 |       109 | N         | F          | ET            |         2
Sample table: match_mast
 match_no | play_stage | play_date  | results | decided_by | goal_score | venue_id | referee_id | audence | plr_of_match | stop1_sec | stop2_sec
----------+------------+------------+---------+------------+------------+----------+------------+---------+--------------+-----------+-----------
        1 | G          | 2016-06-11 | WIN     | N          | 2-1        |    20008 |      70007 |   75113 |       160154 |       131 |       242
        2 | G          | 2016-06-11 | WIN     | N          | 0-1        |    20002 |      70012 |   33805 |       160476 |        61 |       182
        3 | G          | 2016-06-11 | WIN     | N          | 2-1        |    20001 |      70017 |   37831 |       160540 |        64 |       268
        4 | G          | 2016-06-12 | DRAW    | N          | 1-1        |    20005 |      70011 |   62343 |       160128 |         0 |       185
        5 | G          | 2016-06-12 | WIN     | N          | 0-1        |    20007 |      70006 |   43842 |       160084 |       125 |       325
        6 | G          | 2016-06-12 | WIN     | N          | 1-0        |    20006 |      70014 |   33742 |       160291 |         2 |       246
        7 | G          | 2016-06-13 | WIN     | N          | 2-0        |    20003 |      70002 |   43035 |       160176 |        89 |       188
        8 | G          | 2016-06-13 | WIN     | N          | 1-0        |    20010 |      70009 |   29400 |       160429 |       360 |       182
        9 | G          | 2016-06-13 | DRAW    | N          | 1-1        |    20008 |      70010 |   73419 |       160335 |        67 |       194
       10 | G          | 2016-06-14 | WIN     | N          | 0-2        |    20004 |      70005 |   55408 |       160244 |        63 |       189
       11 | G          | 2016-06-14 | WIN     | N          | 0-2        |    20001 |      70018 |   34424 |       160197 |        61 |       305
       12 | G          | 2016-06-15 | DRAW    | N          | 1-1        |    20009 |      70004 |   38742 |       160320 |        15 |       284
       13 | G          | 2016-06-15 | WIN     | N          | 1-2        |    20003 |      70001 |   38989 |       160405 |        62 |       189
       14 | G          | 2016-06-15 | DRAW    | N          | 1-1        |    20007 |      70015 |   43576 |       160477 |        74 |       206
       15 | G          | 2016-06-16 | WIN     | N          | 2-0        |    20005 |      70013 |   63670 |       160154 |        71 |       374
       16 | G          | 2016-06-16 | WIN     | N          | 2-1        |    20002 |      70003 |   34033 |       160540 |        62 |       212
       17 | G          | 2016-06-16 | WIN     | N          | 0-2        |    20004 |      70016 |   51043 |       160262 |         7 |       411
       18 | G          | 2016-06-17 | DRAW    | N          | 0-0        |    20008 |      70008 |   73648 |       160165 |         6 |       208
       19 | G          | 2016-06-17 | WIN     | N          | 1-0        |    20010 |      70007 |   29600 |       160248 |         2 |       264
       20 | G          | 2016-06-17 | DRAW    | N          | 2-2        |    20009 |      70005 |   38376 |       160086 |        71 |       280
       21 | G          | 2016-06-18 | WIN     | N          | 3-0        |    20006 |      70010 |   33409 |       160429 |        84 |       120
       22 | G          | 2016-06-18 | WIN     | N          | 3-0        |    20001 |      70004 |   39493 |       160064 |        11 |       180
       23 | G          | 2016-06-18 | DRAW    | N          | 1-1        |    20005 |      70015 |   60842 |       160230 |        61 |       280
       24 | G          | 2016-06-19 | DRAW    | N          | 0-0        |    20007 |      70011 |   44291 |       160314 |         3 |       200
       25 | G          | 2016-06-20 | WIN     | N          | 0-1        |    20004 |      70016 |   49752 |       160005 |       125 |       328
       26 | G          | 2016-06-20 | DRAW    | N          | 0-0        |    20003 |      70001 |   45616 |       160463 |        60 |       122
       27 | G          | 2016-06-21 | WIN     | N          | 0-3        |    20010 |      70006 |   28840 |       160544 |        62 |       119
       28 | G          | 2016-06-21 | DRAW    | N          | 0-0        |    20009 |      70012 |   39051 |       160392 |        62 |       301
       29 | G          | 2016-06-21 | WIN     | N          | 0-1        |    20005 |      70017 |   58874 |       160520 |        29 |       244
       30 | G          | 2016-06-21 | WIN     | N          | 0-1        |    20007 |      70018 |   44125 |       160177 |        21 |       195
       31 | G          | 2016-06-22 | WIN     | N          | 0-2        |    20002 |      70013 |   32836 |       160504 |        60 |       300
       32 | G          | 2016-06-22 | WIN     | N          | 2-1        |    20001 |      70008 |   37245 |       160085 |        70 |       282
       33 | G          | 2016-06-22 | WIN     | N          | 2-1        |    20008 |      70009 |   68714 |       160220 |         7 |       244
       34 | G          | 2016-06-22 | DRAW    | N          | 3-3        |    20004 |      70002 |   55514 |       160322 |        70 |       185
       35 | G          | 2016-06-23 | WIN     | N          | 0-1        |    20003 |      70014 |   44268 |       160333 |        79 |       221
       36 | G          | 2016-06-23 | WIN     | N          | 0-1        |    20006 |      70003 |   34011 |       160062 |        63 |       195
       37 | R          | 2016-06-25 | WIN     | P          | 1-1        |    20009 |      70005 |   38842 |       160476 |       126 |       243
       38 | R          | 2016-06-25 | WIN     | N          | 1-0        |    20007 |      70002 |   44342 |       160547 |         5 |       245
       39 | R          | 2016-06-26 | WIN     | N          | 0-1        |    20002 |      70012 |   33523 |       160316 |        61 |       198
       40 | R          | 2016-06-26 | WIN     | N          | 2-1        |    20004 |      70011 |   56279 |       160160 |       238 |       203
       41 | R          | 2016-06-26 | WIN     | N          | 3-0        |    20003 |      70009 |   44312 |       160173 |        62 |       124
       42 | R          | 2016-06-27 | WIN     | N          | 0-4        |    20010 |      70010 |   28921 |       160062 |         3 |       133
       43 | R          | 2016-06-27 | WIN     | N          | 2-0        |    20008 |      70004 |   76165 |       160235 |        63 |       243
       44 | R          | 2016-06-28 | WIN     | N          | 1-2        |    20006 |      70001 |   33901 |       160217 |         5 |       199
       45 | Q          | 2016-07-01 | WIN     | P          | 1-1        |    20005 |      70003 |   62940 |       160316 |        58 |       181
       46 | Q          | 2016-07-02 | WIN     | N          | 3-1        |    20003 |      70001 |   45936 |       160550 |        14 |       182
       47 | Q          | 2016-07-03 | WIN     | P          | 1-1        |    20001 |      70007 |   38764 |       160163 |        63 |       181
       48 | Q          | 2016-07-04 | WIN     | N          | 5-2        |    20008 |      70008 |   76833 |       160159 |        16 |       125
       49 | S          | 2016-07-07 | WIN     | N          | 2-0        |    20004 |      70006 |   55679 |       160322 |         2 |       181
       50 | S          | 2016-07-08 | WIN     | N          | 2-0        |    20005 |      70011 |   64078 |       160160 |       126 |       275
       51 | F          | 2016-07-11 | WIN     | N          | 1-0        |    20008 |      70005 |   75868 |       160307 |       161 |       181
Sample table:soccer_venue
 venue_id |       venue_name        | city_id | aud_capacity
----------+-------------------------+---------+--------------
    20001 | Stade de Bordeaux       |   10003 |        42115
    20002 | Stade Bollaert-Delelis  |   10004 |        38223
    20003 | Stade Pierre Mauroy     |   10005 |        49822
    20004 | Stade de Lyon           |   10006 |        58585
    20005 | Stade VElodrome         |   10007 |        64354
    20006 | Stade de Nice           |   10008 |        35624
    20007 | Parc des Princes        |   10001 |        47294
    20008 | Stade de France         |   10002 |        80100
    20009 | Stade Geoffroy Guichard |   10009 |        42000
    20010 | Stadium de Toulouse     |   10010 |        33150

Sample Solution:

SQL Code:

-- Selecting venue_name and the count of goals scored in each venue
SELECT venue_name, count(venue_name)
-- From clause with JOINs between goal_details, soccer_country, match_mast, and soccer_venue
FROM goal_details
JOIN soccer_country ON goal_details.team_id = soccer_country.country_id
JOIN match_mast ON goal_details.match_no = match_mast.match_no
JOIN soccer_venue ON match_mast.venue_id = soccer_venue.venue_id
-- Grouping the results by venue_name to count goals scored in each venue
GROUP BY venue_name
-- Ordering the results by the count of goals scored in each venue in descending order
ORDER BY COUNT(venue_name) DESC;

Sample Output:

       venue_name        | count
-------------------------+-------
 Stade de France         |    18
 Stade de Lyon           |    16
 Stade Pierre Mauroy     |    13
 Stade de Bordeaux       |    13
 Stade VElodrome         |    11
 Stadium de Toulouse     |     9
 Stade de Nice           |     8
 Stade Geoffroy Guichard |     8
 Stade Bollaert-Delelis  |     7
 Parc des Princes        |     5
(10 rows)

Code Explanation:

The said query in SQL that selects a list of all venues along with the count of goals scored at each venue from the tables 'goal_details', 'soccer_country', 'match_mast', and 'soccer_venue'.
Using multiple JOIN operations the 'goal_details' and 'soccer_country' tables are joined based on the team ID and country ID columns, the 'goal_details' and 'match_mast' tables are joined based on the match number column,
the 'match_mast' and 'soccer_venue' tables are joined based on the venue ID column.
The GROUP BY clause groups the results by venue name. This means that the COUNT(venue_name) function will count the number of goals scored at each venue.
The ORDER BY clause sorts the results in descending order based on the count of goals scored at each venue. The venues with the most goals scored will be listed first.

Alternative Solutions:

Subquery with EXISTS:

-- Selecting venue_name and the count of goals scored in each venue
SELECT v.venue_name, COUNT(gd.goal_id) as num_goals
-- From clause with JOINs between soccer_venue, match_mast, and goal_details
FROM soccer_venue v
JOIN match_mast m ON v.venue_id = m.venue_id
JOIN goal_details gd ON m.match_no = gd.match_no
-- Where clause with EXISTS subquery to filter results for matches with at least one goal
WHERE EXISTS (
    -- Subquery to check if there is at least one goal_details record for the match
    SELECT 1
    FROM goal_details gd2
    WHERE gd2.match_no = gd.match_no
)
-- Grouping the results by venue_name to count goals scored in each venue
GROUP BY v.venue_name
-- Ordering the results by the count of goals scored in each venue in descending order
ORDER BY num_goals DESC;

Explanation:

This query uses an EXISTS subquery to check if there's at least one record in goal_details for each match. It joins soccer_venue, match_mast, and goal_details, and then uses the EXISTS clause to filter the results.

Using Inner Join with Goal_Details:

-- Selecting venue_name and the count of goals scored in each venue
SELECT v.venue_name, COUNT(gd.goal_id) as num_goals
-- From clause with JOINs between soccer_venue, match_mast, and goal_details
FROM soccer_venue v
JOIN match_mast m ON v.venue_id = m.venue_id
JOIN goal_details gd ON m.match_no = gd.match_no
-- Grouping the results by venue_name to count goals scored in each venue
GROUP BY v.venue_name
-- Ordering the results by the count of goals scored in each venue in descending order
ORDER BY num_goals DESC;

Explanation:

This query directly joins all the necessary tables (soccer_venue, match_mast, goal_details, and soccer_country) using inner joins and then counts the goals.

Using a Subquery in the WHERE Clause:

-- Selecting venue_name and the count of goals scored in each venue
SELECT v.venue_name, COUNT(gd.goal_id) as num_goals
-- From clause with JOINs between soccer_venue, match_mast, and goal_details
FROM soccer_venue v
JOIN match_mast m ON v.venue_id = m.venue_id
JOIN goal_details gd ON m.match_no = gd.match_no
-- Where clause to filter results for matches that have at least one goal
WHERE m.match_no IN (
    -- Subquery to select distinct match_no values with at least one goal_details record
    SELECT DISTINCT gd2.match_no
    FROM goal_details gd2
)
-- Grouping the results by venue_name to count goals scored in each venue
GROUP BY v.venue_name
-- Ordering the results by the count of goals scored in each venue in descending order
ORDER BY num_goals DESC;

Explanation:

This query uses a subquery in the WHERE clause to filter the matches. It first selects distinct match numbers from goal_details and then checks if the match number is in the list of matches for each venue. This way, only venues with at least one goal are included in the result.

Relational Algebra Expression:

Relational Algebra Expression: Find the venue with number of goals that has seen.

Relational Algebra Tree:

Relational Algebra Tree: Find the venue with number of goals that has seen.

Practice Online


Sample Database: soccer

soccer database relationship structure

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: SQL Exercise Find the yellow cards received by each country.
Next SQL Exercise: Match where no stoppage time added in 1st half of play.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.