There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply () below.
If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.
Join the Discussion. Help a fellow learner on their journey.
Ask or answer a question about this exercise by clicking reply () below!
Agree with a comment or answer? Like () to up-vote the contribution!
Why does adding a couple of extra brackets here make a difference to how to query runs? Does SQL not follow BODMAS?
SELECT state,
100.0* (
SUM(CASE WHEN elevation >= 2000
THEN 1 ELSE 0
END)/COUNT(*) )
AS percentage_high_elevation_airports
FROM airports
GROUP BY state
SELECT state, 100.0 * sum(CASE WHEN elevation >= 2000 THEN 1 ELSE 0 END) /
count(*) as percentage_high_elevation_airports
FROM airports
GROUP BY state;
What we want to calculate is the ratio of airports with the elevation above 2000 to all the airports in each state. So once there is an airport with the elevation above 2000, we mark it as “1”, and the sum of “1” is the No. of airports with the elevation above 2000. COUNT(*) can help us calculate the No. of all airport in each state, so after dividing these two numbers, we can get the percentage we want.
If I put all the conditional aggregate in parenthesis next to the multiplier like so:
100.0* ( SUM(CASE …) / COUNT(*) )
…it doesn’t calculate correctly.
However, if I put parenthesis around the multiplier and the first aggregate like so:
( 100.0 * sum(CASE…) ) / count(*)
…then this works correctly.
This doesn’t make sense to me. The math should be the same, but the results are completely different. Is this a Codecademy issue or a formatting thing with SQL as a whole?
Or have I completely forgotten the order of mathematical operations? I feel confident that the first example should work because I’m dividing the two numbers to get a decimal and then multiplying everything by 100 to convert it to percentage.
The issue here is as so:
if we run this:
SELECT 100.03/7, 100.0(3/7);
we can see that with no brackets we get 42.85, and with brackets, we get 0.
This happens when dividing integer values with some programming languages (and probably why they use 100.0 here and not 100).
The difference is in the calculation of 3/7, which includes only integer values, and returns just the 0 (when it should be 0.42) and the remainder is disregarded.
That’s why we are getting zeros where there should be other values (for AK for example).
Can someone help me on why the following does not work?
SELECT state, (100.0 * count(CASE WHEN elevation >= 2000 THEN 1 ELSE IS NULL END) / count(*)) as percentage_high_elevation_airports FROM airports GROUP BY state;
Your format looked right to me, so I was a bit stumped by this at first, but I did some experimentation. it looks like you want “ELSE NULL” not “ELSE IS NULL.” You’re also missing a parenthesis before “COUNT” compared to the “right” answer I found (using the SUM function instead) for this problem, but it seems to run fine even without that parenthesis. So I think the issue just was using “IS NULL” instead of just “NULL.”