2016-08-10 6 views
-1

Wie bekomme ich Ausgabe in das folgende Format mit SQL? Ich bin in der Lage, es mit Fallsumme zu tun, aber ich bin nicht in der Lage, einzigartige Benutzerzahl in der gleichen Zeile zu erhalten.Holen Sie sich das nächste

id unique_users male_count female_count 
101  3   1   2 
201  1   0   1 
. 
. 
+1

Was haben Sie bisher versucht? Haben Sie SUM mit CASE für die Geschlechtertrennung untersucht? – hsan

+1

bedingte Aggregation ist das Schlüsselkonzept, um in der Zukunft nachzuschlagen, aber juergend stellt eine gute Antwort für Sie dar – Matt

Antwort

2

Alternative zählt verschiedene Männchen und Weibchen.

SELECT 
    ID, 
    COUNT(DISTINCT "USER") AS unique_users, 
    COUNT(DISTINCT DECODE(gender,'M',"USER")) AS male_count, 
    COUNT(DISTINCT DECODE(gender,'F',"USER")) AS female_count 
FROM your_table 
GROUP BY ID 
ORDER BY ID; 

Und das gleiche, aber ohne die Oracle-spezifische DECODE-Funktion.

SELECT 
    ID, 
    COUNT(DISTINCT "USER") AS unique_users, 
    COUNT(DISTINCT CASE gender WHEN 'M' THEN "USER" ELSE NULL END) AS male_count, 
    COUNT(DISTINCT CASE gender WHEN 'F' THEN "USER" ELSE NULL END) AS female_count 
FROM your_table 
WHERE ID = 101 
GROUP BY ID 
ORDER BY ID; 

Ich habe "USER" zitiert, da es eine bestimmte Bedeutung in Oracle hat.

3
select id, 
     count(distinct user) as unique_users, 
     sum(case when gender = 'M' then 1 else 0 end) as male_count, 
     sum(case when gender = 'F' then 1 else 0 end) as female_count 
from your_table 
group by id 
+0

Die Zählung von Mann und Frau ist nicht die einzige Zählung, wenn ich diese benutze. – Siddarth

Verwandte Themen