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 ==> | Calculations (18 exercises) |
Level ==> | Harder than average |
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).
First open the script in the folder above and execute it - you should now be looking at a list of the world's countries.
It's traditional to express a country's size in terms of how many times you could fit Wales into it - so let's do this! First create the following columns in a query:
Column | What it should show |
---|---|
AreaLeftOver | The remainder when you divide a country's area by the area of Wales |
WalesUnits | The number of exact times that the area of Wales divides a country's area, once you've subtracted the area left over as calculated above |
You'll need to know that Wales is 20,761 square kilometres in area!
Now extend your query to show a text description of how many times each country could accommodate Wales:
The first few countries in alphabetical order.
Finally, change your query's sort order so that it lists countries with the closest in size to Wales first:
El Salvador is closest in size to Wales, followed by Slovenia (the first is slightly larger, the second slightly smaller).
You may find the ABS function useful to show the absolute value of the difference in sizes for each country. If you're wondering why Wales isn't top of the list ... it's not a country in its own right!
Save this query as How many whales, then close it down.
You can find other training resources for the subject of this exercise here:
From: | Chinmaykumar |
When: | 02 Jul 23 at 00:10 |
Query_Sol. for MySQL users
SELECT
Country,
KmSquared,
/* In MySQL, you can use the 'DIV' to perform integer division in a SELECT statement */
(KmSquared DIV 20761) AS WalesUnits,
/* To find the remainder of division use '%' (modulo) operator. Ex: 10 % 3 is 1 */
(KmSquared % 20761) AS AreaLeftOver,
CASE
WHEN
(KmSquared DIV 20761) > 0
THEN
CONCAT((KmSquared DIV 20761),' x Wales plus ',(KmSquared % 20761),' sq. km.')
ELSE 'Smaller than Wales'
END AS WalesComparison
FROM
countriesbyarea
/* Important: To sort column by the specific nearest values to the specific value
use 'ABS(column_name - target_value)' */
ORDER BY ABS(KmSquared - 20761);
From: | Aravindh_sql |
When: | 26 May 22 at 07:42 |
SELECT Country,
KmSquared,
KmSquared/20761 as WalesUnits,
(KmSquared)-(KmSquared/20761)*20761 as AreaLeftOver,
CASE
WHEN KmSquared < 20761 THEN 'Smaller than Wales'
ELSE
CONCAT(
KmSquared/20761, 'x', ' Wales Plus ',' ' ,
(KmSquared)-(KmSquared/20761)*20761 ,' ','Sq.km'
)
END as WalesComparision
FROM CountriesByArea
ORDER BY ABS(20761-KmSquared) ASC
From: | MalaMi |
When: | 14 Jun 21 at 22:44 |
SELECT Country,
KmSquared,
KmSquared % 20761 AS AreaLeftOver,
(KmSquared - (KmSquared % 20761))/20761 AS WalesUnits,
CONCAT((KmSquared - (KmSquared % 20761))/20761, ' x Wales plus ', KmSquared % 20761, ' sq. km.') AS WalesComparison
FROM CountriesByArea
ORDER BY ABS(20761 - KmSquared) ASC
From: | SeahawkZim |
When: | 16 Mar 20 at 22:58 |
In the SQL script used to design and fill the CountriesByArea table, there is no entry for Wales.
From: | Andy B |
When: | 17 Mar 20 at 09:54 |
There doesn't need to be! You can assess how close in area a country is to Wales without including Wales in your list of countries.
From: | SeahawkZim |
When: | 17 Mar 20 at 14:55 |
Yeah, I saw that after I posted my comments. I tried to delete the comments, but I did not see that as an option. Thanks for posting a reply regardless.
From: | hjay629 |
When: | 18 Feb 19 at 23:28 |
--SPOILER--
ANSWER:
SELECT
Country
, KmSquared
, ROUND(KmSquared/20761, 0) as 'WalesUnits'
, (Kmsquared % 20761) as 'AreaLeftOver'
, CASE
WHEN
CAST(ROUND((KmSquared/20761), 0) as varchar(10)) < 1
THEN
'Smaller than Wales'
ELSE
CAST(ROUND((KmSquared/20761), 0) as VARCHAR(10)) + ' x ' + ' Wales plus ' +
CAST( (KmSquared % 20761) as VARCHAR(10)) + ' sq. km.'
END as 'Wales Comparison'
FROM
CountriesByArea
Order By ABS(KmSquared - 20761)
From: | chaluvadi |
When: | 07 Sep 18 at 17:05 |
if i have array of numbers
10, 9.8, 10.1, 9.5, 10.8, 9.7
I would like to arrange this array by nearest to 10.
To compare this array to 10. I am going to subtract array values from 10:
(10-10), (10 - 9.8), (10-10.1), (10-9.5), (10-10.8), (10-9.7)
0, 0.2, -0.1, 0.5, -0.8, 0.3
To compare numbers i have to consider both postives and negatives, so i am going to use absolute values
0, 0.2, 0.1, 0.5, 0.8, 0.3
Now let's arrange these numbers nearest to 10:
0, 0.1, 0.2, 0.3, 0.5, 0.8
Now write down with corresponding numbers:
10, 10.1, 9.8, 9.7, 9.5, 10.8
So to summarize, i arranged numbers by using ABS(MyNumbers - 10)
From: | gemini132 |
When: | 13 Aug 18 at 13:12 |
I managed to get until the last part but still when sorting the results as requested the are two countries misssing, any ideas on the tweak that needs to be done to the query to get these two counties listed?
SELECT Country
,KmSquared
,ABS(KmSquared/20761) AS WalesUnits
,ABS(KmSquared)-((KmSquared/20761)*20761) AS AreaLeftOver
,CASE
WHEN KmSquared > 20761 THEN CAST(KmSquared/20761 AS VARCHAR(20))
+ ' x ' + 'Wales plus' + ' ' + CAST((KmSquared)-((KmSquared/20761)*20761
) AS VARCHAR(25)) + ' ' + 'sq. km.'
WHEN KmSquared <= 20761 THEN 'Smaller than Wales'
END AS WalesComparison
FROM CountriesByArea
WHERE kmSquared <= ALL (SELECT KmSquared
FROM CountriesByArea
WHERE ABS(20761 - KmSquared) < 500)
From: | DataDriven |
When: | 18 Jun 18 at 23:43 |
Can anyone help me with the query for text description of how many times each country could accommodate Wales?
From: | linjom |
When: | 17 Apr 18 at 13:17 |
I could solve till the second last requirement. The final one seems tough .... can anyone help with the trick?
From: | morguel |
When: | 22 Apr 18 at 08:49 |
Hi,
at the first look it seems though, but it is quite simple. You want to order by KmSquared ascending in the near of Wales (size=20761). So what if Wales itself would be in the list? It's KmSquared would be 20761. The difference WalesSize-20761=0 the next greater one could be (WalesSize+x)-20761=x ans so on...
But what about the smaler ones? Same thoughts. And here comes ABS function in play to get rid of the minus...Clear now? Or do u want the result?
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.