Hello, coders! π»
Here's a little challenge for beginners.
We have a users
table and we need to know the number of users in 3 age ranges.
- if age < 18 then age range is 'minor'.
- if age < 65 then age range is 'adult'.
- if age >= 65 then age range is 'senior'.
Table structure
CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
age SMALLINT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Sample data
INSERT INTO users(age)
VALUES
(2), (4), (6),
(12), (14), (16), (21), (25),
(27), (31), (33), (37), (39),
(57), (57), (59), (61), (63), (65)
;
Expected results
| ageRange | nb |
| -------- | ------ |
| 6 | minor |
| 12 | adult |
| 1 | senior |
Go ahead and give it a try!
You might want to read about the following statements: IF
, CASE/WHEN
and GROUP BY
.
First we need to determine age ranges and for that we're going to add a CASE statement. Pretty straightforward, right? We could have used two Add that to a Next we need to count how many users belong to each group. And we're done!π‘ Click to view my solution π‘
Note that I'm using MySQL but since it is standard SQL you should be able to port it to another DB engine.
CASE
WHEN age < 18 THEN 'minor'
WHEN age < 65 THEN 'adult'
ELSE 'senior'
END as ageRange
IF
statements but I opted for CASE/WHEN
as I find it elegant. :)SELECT
statement and you get users' age along with their age group.
It's as simple as adding a GROUP BY ageRange
clause.
SELECT
count(*),
CASE
WHEN age < 18 THEN 'minor'
WHEN age < 65 THEN 'adult'
ELSE 'senior'
END as ageRange
FROM users
GROUP BY ageRange
Happy coding! β¨οΈ
Top comments (0)