假设我有一个以下查询(这是我实际查询的一部分),它检索该人的 person_id 和年龄:
select p.person_id,TRUNC ((SYSDATE - p.birth_date) / 365.25, 0) AS age
from person p
现在在得到这个年龄后,我想得到每个年龄组的人数,例如:
group count
age <=5 100
age >5 and age <=10 50
age > 10 15
... ...
我可以使用 group by 子句来计算个人年龄。但是如何在两个年龄之间进行计数?
有人可以告诉我我可以做到的方式吗?
您可以使用以下数据作为引用:
pid age
1 4
2 13
3 10
4 8
5 9
6 12
所以结果应该是:
group count
age < =5 1
>5 & <=10 3
> 10 2
最佳答案
首先,您的年龄计算不正确。您几乎肯定想要测量两个日期之间的月份,而不是希望除以 365.25 足够接近
trunc( months_between( sysdate, p.birth_date )/ 12 )
其次,如果要按范围分组,只需在
case
语句中选择范围并按该范围分组SELECT (case when age <= 5
then 'age <= 5'
when age > 5 and age <= 10
then 'age > 5 and age <= 10'
else 'age > 10'
end) bucket,
count(*)
FROM( SELECT trunc( months_between( sysdate, p.birth_date )/ 12 ) age
FROM person p )
GROUP BY (case when age <= 5
then 'age <= 5'
when age > 5 and age <= 10
then 'age > 5 and age <= 10'
else 'age > 10'
end)
关于sql - 如何在 Oracle 数据库中使用 SQL 查询根据年龄组获取人数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31667844/