2009-12-01 18 views
5

eine Tabelle angegeben, dass für die folgenden Befehle:Berechnung Prozentsatz innerhalb einer Gruppe

sex | count 
-------+------ 
male | 1960 
female | 1801 

und:

sex  | employed | count 
---------+----------+------- 
male | f  | 1523 
male | t  | 437 
female | f  | 1491 
female | t  | 310 

Ich habe eine Schwierigkeit zu schreiben ein

select sex, count(*) from my_table group by sex; 
select sex, employed, count(*) from my_table group by sex, employed; 

gibt Abfrage, die den prozentualen Anteil der Beschäftigten in jeder Geschlechtsgruppe berechnet. So sollte die Ausgabe wie folgt aussehen:

sex  | employed | count | percent 
---------+----------+--------+----------- 
male | f  | 1523 | 77.7% (1523/1960) 
male | t  | 437 | 22.3% (437/1960) 
female | f  | 1491 | 82.8% (1491/1801) 
female | t  | 310 | 17.2% (310/1801) 
+0

Mögliche Duplikate von [Berechnung Prozentsätze mit GROUP BY Abfrage] (http://stackoverflow.com/questions/6207224/calculcating-percentages-with-group-by-query) – Vadzim

Antwort

6

Sie können es mit einem Sub-select und einem Join:

SELECT t1.sex, employed, count(*) AS `count`, count(*)/t2.total AS percent 
    FROM my_table AS t1 
    JOIN (
    SELECT sex, count(*) AS total 
     FROM my_table 
     GROUP BY sex 
) AS t2 
    ON t1.sex = t2.sex 
    GROUP BY t1.sex, employed; 

ich nicht von anderen Ansätzen aus der Spitze von meinem Kopf denken kann.

+0

Vielen Dank eine Reihe, nach ein paar kleinen Änderungen Ihre Lösung hat funktioniert! – Jon

+0

Gern geschehen. – outis

8

kann es zu spät sein, aber Forscher zu dem kommenden könnte mögliche Lösung:

von IO Statistik scheint dies die effektivste Lösung zu sein - auf der Anzahl der Zeilen abhängig sein kann abgefragt werden - getestet auf

select sex, COUNT(*)/CAST(SUM(count(*)) over() as float) 
    from my_table 
group by sex 

Grüße, : über Zahlen ...

die gleiche Haltung könnte für immer männlich/weiblich Prozentsatz verwendet werden Jan

Verwandte Themen