EXERCISE TOPIC▼
SQL EXERCISES▼
SQL EXERCISES▼
- Simple Queries (4)
- Setting criteria using WHERE (5)
- Calculations (7)
- Calculations using dates (4)
- Basic joins (8)
- More exotic joins (2)
- Aggregation and grouping (8)
- Views (5)
- Subqueries (5)
- Stored procedures (5)
- Variables (8)
- Parameters and return values (11)
- Testing conditions (1)
- Looping (3)
- Scalar functions (6)
- Transactions (5)
- Creating tables (5)
- Temporary tables and table variables (9)
- Table-valued functions (6)
- Derived tables and CTEs (13)
- Dynamic SQL (4)
- Pivots (2)
- Triggers (2)
- Archived (70)
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.
You can learn how to do this exercise if you attend one of more of the courses listed below!
Software ==> | SQL (198 exercises) |
Version ==> | Any version of SQL Server |
Topic ==> | Subqueries (5 exercises) |
Level ==> | Average difficulty |
Courses ==> | Introduction to SQL / Fast-track SQL |
- Go into SQL Server Management Studio;
- Open the SQL file you've just unzipped (you can press CTRL + O to do this); then
- 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:

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.
This is also a perfect output:
SELECT A.CountryName
FROM TblCountry A
INNER JOIN
(
SELECT TE.CountryID, COUNT(TE.EventID) XYX
FROM tblEvent TE
GROUP BY TE.CountryID HAVING COUNT(TE.EventID) > 8) B ON A.CountryID = B.CountryID
)
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
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
Couldn't do it without using HAVING in the subquery :-(
Anyone has any ideas?
DISTINCT cntr.CountryName
FROM
tblEvent evnt
INNER JOIN tblCountry cntr
ON evnt.CountryID = cntr.CountryID
WHERE evnt.CountryID IN
--countryID for countries that has more than 8 events
(
SELECT
evnt.CountryID
--,count(evnt.EventID) AS [Number of events]
FROM
tblEvent evnt
INNER JOIN tblCountry cntr
ON evnt.CountryID = cntr.CountryID
GROUP BY
evnt.CountryID,
cntr.CountryName
Having
count(evnt.EventID) > 8
)
Hi,
Looks like this is working:
SELECT
c.CountryName
FROM
tblCountry c
WHERE
8 < (
SELECT
COUNT(e.EventID)
FROM
tblEvent e
WHERE
e.CountryID = c.CountryID
)
Order By
c.CountryName;