SQL | Subqueries exercise | Show countries with more than 8 events, using a subquery

This exercise is provided to allow potential course delegates to choose the correct Wise Owl Microsoft training course, and may not be reproduced in whole or in part in any format without the prior written consent of Wise Owl.

Software ==> SQL  (198 exercises)
Version ==> Any version of SQL Server
Topic ==> Subqueries  (5 exercises)
Level ==> Average difficulty
Subject ==> SQL training
Before you can do this exercise, you'll need to download and unzip this file (if you have any problems doing this, click here for help). Once you've done this:
  1. Go into SQL Server Management Studio;
  2. Open the SQL file you've just unzipped (you can press CTRL + O to do this); then
  3. Execute this script.

This will generate the database that you'll need to use in order to do this exercise (note that the database and script are only to be used for exercises published on this website, and may not be reused or distributed in any form without the prior written permission of Wise Owl).

You need a minimum screen resolution of about 700 pixels width to see our exercises. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.

Write a query which lists out countries which have more than 8 events, using a correlated subquery rather than HAVING

That is: list the names of countries from the countries table where for each country the number of events matching the country's id is more than 8.

If you list the countries in alphabetical order, you should get:

Countries with events

Although your query should be easy to read, one disadvantage is that you can't see how many events there were for each country.


Save this query as Eventful countries, then close it down.

You can unzip this file to see the answers to this exercise, although please remember this is for your personal use only.
This page has 6 threads Add post
29 May 22 at 16:32

SELECT CountryName
FROM tblCountry INNER JOIN tblEvent 
ON tblCountry.CountryID = tblEvent.CountryID
GROUP BY CountryName
HAVING  COUNT(tblEvent.EventID) > 8

This Query Works fine.
Need not to write Sub-Query

12 Feb 21 at 21:14

with cte1 as
select c.countryname,(select COUNT(e.countryid) 
        from tblEvent e 
        where e.CountryID = c.CountryID
        group by e.countryid) as noocc
from tblcountry c)
select CountryName from cte1 where noocc>8

20 Nov 20 at 06:23

This is also a perfect output:

SELECT A.CountryName
FROM TblCountry A 
FROM tblEvent TE 
GROUP BY TE.CountryID HAVING COUNT(TE.EventID) > 8) B ON A.CountryID = B.CountryID

27 Jun 20 at 17:55

We can get the country name and no of event occured  without even using a subquery:

select distinct count([EventName]) as No_of_event,[CountryName] from [tblEvent] e
inner join [dbo].[tblCountry]  c on e.CountryID = c.CountryID
group by [CountryName]
having count([EventName]) >8

11 Jun 20 at 15:56

Not a big deal to show also the numbers of events per country:

select c.CountryName , (select count(*)    from tblEvent where CountryID = C.CountryID) [Number of events]
from tblCountry c

12 Apr 20 at 23:38

Couldn't do it without using HAVING in the subquery :-(
Anyone has any ideas?

DISTINCT cntr.CountryName
    tblEvent evnt
    INNER JOIN tblCountry cntr
    ON evnt.CountryID = cntr.CountryID
WHERE evnt.CountryID IN
--countryID for countries that has more than 8 events
        --,count(evnt.EventID) AS [Number of events]
            tblEvent evnt
            INNER JOIN tblCountry cntr
            ON evnt.CountryID = cntr.CountryID
        GROUP BY
        count(evnt.EventID) > 8

16 Apr 20 at 18:01


Looks like this is working:

    tblCountry c
    8 < (
            tblEvent e
            e.CountryID = c.CountryID
Order By

21 Apr 20 at 16:44

Got it.