2016-06-13 7 views
1

Ich habe eine SQL-Abfrage für Kreuztabelle, um die Anzahl von für jede eindeutige kategorische Kategorie für jeden bin-Bereich des fortlaufenden Attributs zu erhalten.SQL-Kreuztabellenabfrage für numerisches Attribut

ZB: Geschlecht (kategorisches Attribut männlich, weiblich) & Alter (fortlaufendes Attribut). Für Alter, Binning create as, 0-10, 10-20, 20-30, 30-40 ...

Also ich bin auf der Suche nach Abfrage, um mich für jeden Bereich auf kategoriale Attribut (Geschlecht) zurückzugeben.

Erwartete Ausgabe: für bestimmten Bereich: 0-10

CNT   LABEL 
365503  MALE 
177939  FEMALE 

Die folgende Abfrage arbeiten, aber für einen Bereich zu einer Zeit, so hat ich eine Schleife für jeden Bereich setzen,

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 

Aber ich möchte diese Schleife zu entfernen, um die Leistung zu erhöhen und alle auf einmal für alle Bereich erhalten möchten.

+0

ich Orakel bin mit –

Antwort

1

eine Auxilliar Tabelle wie folgt verwendet:

select (level-1)*10 low_limit, 
     level*10 high_limit , 
     ((level-1)*10) || ' - ' || (level*10) as band 
from dual connect by level <= 12 

Und dann kommen Sie nur mit ihm und der Gruppe von:

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

was Band hier ist? und ich habe eine Altersspanne (0-10,10-20,20-30 ..) und ich möchte für jeden Bereich getrennt zählen, wie ich oben erklärt habe. Das obige Ergebnis in meiner Frage bezieht sich auf einen Bereich, aber ich suche nach allen Bereichen auf einmal statt der Schleife –

+0

Haben Sie die Hilfsabfrage ausgeführt? Du wirst es dann verstehen :) –

Verwandte Themen