数值属性的SQL交叉表查询
我有一个用于交叉表的SQL查询,用于获取连续属性的每个bin范围的每个不同分类类别的计数 例如:性别范畴属性男性、女性和年龄连续属性。 对于年龄,binning创建为,0-10,10-20,20-30,30-40 所以我正在寻找一个查询,以返回分类attributeGender上每个范围的计数 预期输出:对于特定范围:0-10数值属性的SQL交叉表查询,sql,oracle,Sql,Oracle,我有一个用于交叉表的SQL查询,用于获取连续属性的每个bin范围的每个不同分类类别的计数 例如:性别范畴属性男性、女性和年龄连续属性。 对于年龄,binning创建为,0-10,10-20,20-30,30-40 所以我正在寻找一个查询,以返回分类attributeGender上每个范围的计数 预期输出:对于特定范围:0-10 CNT LABEL 365503 MALE 177939 FEMALE 下面的查询正在工作,但每次只针对一个范围,因此我必须为
CNT LABEL
365503 MALE
177939 FEMALE
下面的查询正在工作,但每次只针对一个范围,因此我必须为每个范围设置一个循环
WITH q0 AS
(SELECT GENDER label
FROM IMPORTDATAAJ
WHERE GENDER IS NOT NULL
GROUP BY GENDER
ORDER BY 1 ASC
) ,
q1 AS
(SELECT GENDER label
FROM IMPORTDATAAJ
WHERE AGE >= 0
AND AGE <= 1.0
),
q3 AS
(SELECT q0.label label,
COUNT(q1.label) cnt
FROM q0
LEFT OUTER JOIN q1
ON (q0.label=q1.label)
GROUP BY q0.label
ORDER BY label
)
SELECT q3.label,q3.cnt FROM q3
但我希望删除此循环以提高性能,并希望在所有范围内一次获得所有信息。使用如下辅助表:
select (level-1)*10 low_limit,
level*10 high_limit ,
((level-1)*10) || ' - ' || (level*10) as band
from dual connect by level <= 12
然后加入它并分组:
select band, gender, count(*)
from(
select gender as label
from IMPORTDATAAJ
join (select (level-1)*10 low_limit,
level*10 high_limit ,
((level-1)*10) || ' - ' || (level*10) as band
from dual connect by level <= 12
)
on age >=low_limit and age < high_limit
)
group by band, gender
order by band, gender;
这里的乐队是什么?我的年龄范围是0-10,10-20,20-30。。正如我上面解释的,我想分别计算每个范围。我问题中的上述结果是针对一个范围,但我一次查找所有范围,而不是循环。是否运行了辅助查询?你就会明白: