Let’s consider a part of table like this:
x
id_client | age
-----------+-----
16052 | 65
25027 | 29
25659 | 44
33297 | 32
38750 | 53
43063 | 28
56311 | 48
61721 | 21
104027 | 25
112005 | 40
114389 | 28
114395 | 58
The problem is to detect the age’s groups with step 10 years. It’s not a kind of problems like age’s groups assigning, like:
SELECT Id_client, Age, CASE
WHEN age BETWEEN 1 AND 10 THEN '1-10'
WHEN age BETWEEN 11 AND 20 THEN '11-20'
WHEN age BETWEEN 21 AND 30 THEN '21-30'
WHEN age BETWEEN 31 AND 40 THEN '31-40'
WHEN age BETWEEN 41 AND 50 THEN '41-50'
WHEN age BETWEEN 51 AND 60 THEN '51-60'
WHEN age BETWEEN 61 AND 70 THEN '61-70'
WHEN age BETWEEN 71 AND 80 THEN '71-80'
WHEN age BETWEEN 81 AND 90 THEN '81-90'
ELSE 'NaN' END AS Group
FROM table
In this case the request must show something like
| Groups |
|----------|
| (1-10) |
| (11-20) |
| (21-30) |
| (31-40) |
| (41-50) |
| (51-60) |
| (61-70) |
| (71-80) |
| (81-90) |
where MIN(age) = 1
and MAX(age) = 88
. I’m currently working with PostgreSQL 12. Do you know any function or have any idea, how to do that?
Advertisement
Answer
How about just using string operations?
select '(' || floor( (age - 1) / 10 ) || '-' || floor( (age + 9) / 10 ) || ')' as grp