我需要将每个年龄段的数据分为以下类别:1-6,6-12,12-18,> 18.
我遇到的问题是当年龄计算为6时,记录没有显示在任何类别中。我希望它在我的逻辑下面应该是6-12。
为避免重复,我将查询编写为:
1-6: age<=5
6-12: age >=6 <=11
12-18:age >=12 <=17
>18:age >=18
为什么我错过了6岁的记录?
编辑:
这是我的年龄计算:
(date1-DOB)/365.25 >= 6
(date1-DOB)/ 365.25 <= 11
我也尝试1-6作为&lt; 6,6-12作为&gt; 6&lt; 12和12-18作为>&lt; 12&lt; 18但是在某些情况下,6岁时表现出1-6和6-12。在12-12和12-18中有12个。有没有办法避免这种情况?
答案 0 :(得分:1)
您可以使用CASE
,您可以明确地写出匹配每个范围的条件;例如:
select x,
case
when x >= 1 and x < 6 then '1-6'
when x >= 6 and x < 12 then '6-12'
when x >= 12 and x < 18 then '12-18'
when x >= 18 then '>18'
else 'not matched'
end as range
from ( select level / 2 as x from dual connect by level < 20 )
你可以用不同的方式做同样的事情,但我相信这是最具可读性的。
答案 1 :(得分:0)
你总是在范围内没有覆盖范围,例如:
1-6: age <6 not <=5 and
6-12: age >=6 <=12 not age >=6 <=11
12-18:age >=12 <=18 not >=12 <=17
>18:age >=18