2017-05-12 21 views
0

解決策を見つけることなく、同様の性質の他の質問を見てきました。MySQL 2つのクエリで条件が異なる1つのクエリ

私は男性のSUMデータを取得し、その後サインアッププロセスで女性のSUMデータを取得します。これは、条件が異なる2つのテーブルの同じデータを対象にしています。どのようにこれらの2つを1つに結合できますか?

は、ここで男性のためのクエリです:

SELECT 
    SUM(signup_data.submited) AS SubmitedMales, 
    SUM(signup_data.approved) AS ApprovedMales, 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id 
    WHERE users.sex = 'male' 

女性のためのクエリ:

SELECT 
    SUM(signup_data.submited) AS SubmitedFemales, 
    SUM(signup_data.approved) AS ApprovedFemales, 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id 
    WHERE users.sex = 'female'"; 

ありがとう!

+0

この情報について:http://stackoverflow.com/questions/2309943/unioning-two-tables-with-different-number-of-columns – Datsheep

答えて

1

あなたはむしろ

SUM(case when users.sex = 'male' then signup_data.submited end) AS SubmitedMales, 

ようCASE式を使用して、条件付きSUM()を使用する必要がありますあなたのクエリが

SELECT 
    SUM(case when users.sex = 'male' then signup_data.submited end) AS SubmitedMales, 
    SUM(case when users.sex = 'male' then signup_data.approved end) AS ApprovedMales, 
    SUM(case when users.sex = 'female' then signup_data.submited end) AS SubmitedFemales, 
    SUM(case when users.sex = 'female' then signup_data.approved end) AS ApprovedFemales, 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id 
+0

ありがとうございました!非常に役立ちます! :) –

1

する必要がありますこれは、集計関数内caseを使用して条件付きの集約を使用することができます。

SELECT 
    SUM(case when users.sex = 'female' then signup_data.submited else 0 end) AS SubmitedFemales, 
    SUM(case when users.sex = 'female' then signup_data.approved else 0 end) AS ApprovedFemales, 
    SUM(case when users.sex = 'male' then signup_data.submited else 0 end) AS SubmitedMales, 
    SUM(case when users.sex = 'male' then signup_data.approved else 0 end) AS ApprovedMales 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id; 
0
SELECT * FROM 

(SELECT 
    SUM(signup_data.submited) AS SubmitedMales, 
    SUM(signup_data.approved) AS ApprovedMales, 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id 
    WHERE users.sex = 'male') AS T1 

(SELECT 
    SUM(signup_data.submited) AS SubmitedFemales, 
    SUM(signup_data.approved) AS ApprovedFemales, 
FROM `signup_data` 
    LEFT JOIN users ON signup_data.user_id = users.user_id 
    WHERE users.sex = 'female') AS T2 
関連する問題