2016-04-10 4 views
0

Wie kann ich die Gesamtzahl weiblicher, insgesamt männlicher und weiblicher Benutzer ermitteln, die keine Bestellung für ein Produkt aufgegeben haben Ergebnisse sollten wie folgt aussehen:Ermitteln Sie die Gesamtzahl der männlichen und weiblichen Benutzer, die keine Bestellung für ein Produkt aufgegeben haben.

total male  | total female  | total 
--------------------------------------- 
31   |  24   | 55 
--------------------------------------- 

Fiddle http://sqlfiddle.com/#!9/3a0e30/36

Zurück Code helfen:

select p.*, 
    (select count(*) 
    from users u 
    where u.uid not in (select o.uid from  orders o where o.productid = p.productid) and 
      u.gender = 'Male' 
    ) as NumMales, 
    (select count(*) 
    from users u 
    where u.uid not in (select o.uid from orders o where o.productid = p.productid) and 
      u.gender = 'Female' 
    ) as NumFemales  

von Produkten p;

+0

Ich missverstanden Ihre Frage, ich habe gerade meine Antwort aktualisiert, um diese Zahlen angezeigt zu bekommen –

Antwort

1

Entschuldigung, ich verstehe deine Frage zuerst nicht, ich dachte, du würdest versuchen, die Anzahl der Nutzer zu ermitteln, es stellt sich heraus, dass du versuchst, mögliche Bestellungen von Produkten für jede Person zu zählen.

SELECT SUM(CASE WHEN gender = 'Male' THEN 1 
      ELSE 0 
      END) as Male, 
     SUM(CASE WHEN gender = 'Female' THEN 1 
      ELSE 0 
      END) as Female, 
     COUNT(1) as Total 
FROM Users U INNER JOIN Products P 
LEFT JOIN Orders O ON O.uid = U.uid AND P.productid = O.productid 
WHERE O.uid IS NULL 

sqlfiddle Und diese Abfrage liefert das gleiche Ergebnis wie die vorherige Abfrage aber nicht Klausel IN, so dass es schneller sein könnte.

SELECT P.productid,P.productname,P.productdescription, 
     SUM(CASE WHEN gender = 'Male' THEN 1 
      ELSE 0 
      END) as Male, 
     SUM(CASE WHEN gender = 'Female' THEN 1 
      ELSE 0 
      END) as Female, 
     COUNT(1) as Total 
FROM Users U INNER JOIN Products P 
LEFT JOIN Orders O ON O.uid = U.uid AND P.productid = O.productid 
WHERE O.uid IS NULL 
GROUP BY P.productid,P.productname,P.productdescription 
+0

Danke. Es funktionierte – phil

Verwandte Themen