2016-04-10 9 views
0

女性の合計、男性の合計、および商品の注文をしなかった男性と女性のユーザーの合計を取得するにはどうすればいいですか?結果は次のようになります。商品の注文をしていない男性と女性の合計男性の数を取得します

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

フィドルを助けるためにhttp://sqlfiddle.com/#!9/3a0e30/36

前のコード:製品pから

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

あなたの質問に誤解がありました。私は答えを更新しました。数字が表示されるように更新しました。 –

答えて

1

申し訳ありませんが、私はあなたの質問を最初に理解できなかった、私はあなたがユーザーの数を取得しようとしていたと思った、それは配置されていない各人物の製品の可能な受注を数えようとしている。

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 そして、このクエリは、あなたの前のクエリと同じ結果を返しますが、それは速いかもしれないので、句を、INを使用していません。

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

ありがとうございました。出来た – phil

関連する問題