数值属性的SQL交叉表查询

数值属性的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 下面的查询正在工作,但每次只针对一个范围,因此我必须为

我有一个用于交叉表的SQL查询,用于获取连续属性的每个bin范围的每个不同分类类别的计数

例如:性别范畴属性男性、女性和年龄连续属性。 对于年龄,binning创建为,0-10,10-20,20-30,30-40

所以我正在寻找一个查询,以返回分类attributeGender上每个范围的计数

预期输出:对于特定范围:0-10

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。。正如我上面解释的,我想分别计算每个范围。我问题中的上述结果是针对一个范围,但我一次查找所有范围,而不是循环。是否运行了辅助查询?你就会明白: