2016-04-10 12 views
0

Toplam kadın, toplam erkek ve (Ürünlerin siparişi verilemeyen hem erkek hem kadın kullanıcıların SUM'u nasıl) alabilirim. sonuçlar aşağıdaki gibi görünmelidir:Bir ürün için sipariş vermemiş toplam erkek ve toplam bayan kullanıcı olun

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

Fiddle yardım etmek http://sqlfiddle.com/#!9/3a0e30/36

Önceki kod: ürünleri p den

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  

;

+0

Sorunu yanlış anladım, sadece bu numarayı görüntülemek için cevabımı güncelledim –

cevap

1

Üzgünüz, sorunuzu ilk başta anladım, kullanıcı saymaya çalıştığınızı sanıyordum, bu, yerleştirilmemiş olan her bir kişi için olası ürün siparişlerini hesaba katmaya çalışıyor. daha hızlı olabilir böylece

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 Ve bu sorgu maddesini İÇİNDE kullanarak önceki sorguda aynı sonucu verir ama.

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

Teşekkürler. İşe yaradı – phil

İlgili konular