假设我有一个以下查询(这是我实际查询的一部分),它检索该人的 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/

10-13 04:30