亚信一道数据仓库的一个很普通的面试题,我发现了一个问题,谁能帮我解释一下。
题目是这样的:
年龄维:
id subl_id age_min age_max age_desc sub_desc
1 1 1 10 1-15 1-10
1 2 11 15 1-15 11-15
2 3 16 25 16-30 16-25
2 4 26 30 16-30 26-30
3 5 30 45 30-45 30-45
事实表:
cust_id sex age deposit
1 1 7 300
2 2 20 30
3 1 16 300
4 1 39 20
场景1:
查询性别为1,年龄小于50,按照age_desc分组计算的客户数。
方法1:(这时候AGE字段是NUMBER类型的)
sql语句如下:
SELECT dim.AGE_DESC,COUNT(f.CUST_ID),SUM(deposit)
FROM AGE_DIM DIM,
AFACT F
WHERE F.SEX=1
AND F.AGE<50
AND F.AGE >=DIM.AGE_MIN
AND F.AGE <=DIM.AGE_MAX
GROUP BY DIM.AGE_DESC
得到的结果如下
1 16-30 1 300
2 1-15 1 300
3 30-45 1 20
场景2:(这时候我把AGE字段由原来的NUMBER改成VARCHAR2(100)类型)
运行上面的SQL语句,得到的结果确实这样的。
1 16-30 1 300
2 30-45 1 20
发现没有统计出这“1 1 7 300”一条数据,应该要出来的,我把7改成1到9之间的数字不能出来,换成10到15之间的数据能出来
这确实是我遇到的一个奇怪的问题。
有兴趣的朋友测试试验一下。难道是ORACLE的一个BUG?请哪位大虾指导一下。。。
阅读(1874) | 评论(1) | 转发(0) |