Read our blogs, tips and tutorials
Try our exercises or test your skills
Watch our tutorial videos or shorts
Take a self-paced course
Read our recent newsletters
License our courseware
Book expert consultancy
Buy our publications
Get help in using our site
547 attributed reviews in the last 3 years
Refreshingly small course sizes
Outstandingly good courseware
Whizzy online classrooms
Wise Owl trainers only (no freelancers)
Almost no cancellations
We have genuine integrity
We invoice after training
Review 30+ years of Wise Owl
View our top 100 clients
Search our website
We also send out useful tips in a monthly email newsletter ...
Software ==> | SQL (203 exercises) |
Topic ==> | Subqueries (8 exercises) |
Level ==> | Average difficulty |
Subject ==> | SQL training |
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.
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).
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.
You can find other training resources for the subject of this exercise here:
From: | Orin |
When: | 03 Mar 24 at 12:03 |
Before looking at the solution, I did not figure out it was possible to link the countries from Country and Event inside the correlation.
So I did the trick with a Distinct :
USE WorldEvents
SELECT Distinct
c.CountryName
-- ,count(e.EventID)
FROM
tblEvent as e
INNER JOIN tblCountry as c
ON e.CountryID = c.CountryID
WHERE
(SELECT count(e2.EventID) FROM tblEvent as E2
WHERE e.CountryID = e2.CountryID) > 8
--GROUP BY
-- c.CountryName
From: | Devender |
When: | 20 Jan 24 at 07:56 |
use WorldEvents
--using group by
select c.countryname from tblCountry c
join tblEvent e
on c.CountryID=e.CountryID
group by CountryName
HAVING COUNT(e.EventID) > 8
-- using sub queri
select c.countryname
from tblCountry c
where (select COUNT(e.countryid)
from tblEvent e
where e.CountryID = c.CountryID
group by e.countryid) > 8
order by CountryName
From: | Aravindh_sql |
When: | 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
From: | Dintakurthi |
When: | 20 Nov 20 at 06:23 |
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
)
From: | Anita |
When: | 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
From: | ShukiMolk |
When: | 12 Apr 20 at 23:38 |
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
)
Kingsmoor House
Railway Street
GLOSSOP
SK13 2AA
Landmark Offices
99 Bishopsgate
LONDON
EC2M 3XD
Holiday Inn
25 Aytoun Street
MANCHESTER
M1 3AE
© Wise Owl Business Solutions Ltd 2024. All Rights Reserved.