WISE OWL EXERCISES

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 | Calculations exercise | Show how big countries are in relation to Wales

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.

The answer to the exercise will be included and explained if you attend the course listed below!

Software ==> | SQL (198 exercises) |

Version ==> | Any version of SQL Server |

Topic ==> | Calculations (7 exercises) |

Level ==> | Harder than average |

Course ==> | Introduction to 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.

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.

--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)

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)**

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)

Can anyone help me with the query for text description of how many times each country could accommodate Wales?

I could solve till the second last requirement. The final one seems tough .... can anyone help with the trick?

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?