it-swarm.com.de

MySQL-eindeutige Anzahl, wenn die Bedingungen eindeutig sind

Ich versuche, eine Abfrage zu erstellen, aus der hervorgeht, wie viele unterschiedliche Frauen und Männer sich in einem bestimmten Datensatz befinden. Die Person wird durch eine Nummer 'tel' identifiziert. Es ist möglich, dass dasselbe 'tel' mehrmals vorkommt, aber das Geschlecht dieses 'tel' sollte nur einmal gezählt werden!

7136609221 - männlich
7136609222 - männlich
7136609223 - weiblich
7136609228 - männlich
7136609222 - männlich
7136609223 - weiblich

Dieses example_dataset würde folgendes ergeben.
Gesamtzahl der eindeutigen Geschlechter: 4
Gesamte einmalige männliche Zählung: 3
Gesamtzahl der einzigartigen Frauen: 1

Meine versuchte Abfrage:

SELECT COUNT(DISTINCT tel, gender) as gender_count, 
       COUNT(DISTINCT tel, gender = 'male') as man_count, 
       SUM(if(gender = 'female', 1, 0)) as woman_count 
FROM example_dataset;

Da sind eigentlich zwei Versuche drin. COUNT(DISTINCT tel, gender = 'male') as man_count scheint nur das Gleiche wie COUNT(DISTINCT tel, gender) zurückzugeben - der dortige Qualifier wird nicht berücksichtigt. Und die Funktion SUM(if(gender = 'female', 1, 0)) zählt alle weiblichen Datensätze, wird jedoch nicht von DISTINCT-Tels gefiltert.

24
Federico

Hier ist eine Option, die eine Unterabfrage mit DISTINCT verwendet:

SELECT COUNT(*) gender_count,
   SUM(IF(gender='male',1,0)) male_count,
   SUM(IF(gender='female',1,0)) female_count
FROM (
   SELECT DISTINCT tel, gender
   FROM example_dataset
) t

Dies funktioniert auch, wenn Sie keine Unterabfrage verwenden möchten:

SELECT COUNT(DISTINCT tel) gender_count,
    COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count,  
    COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count
FROM example_dataset
62
sgeddes