2012-11-30 109 views
-2

我有一個快速的問題...結合了兩種SQL查詢到1

我想兩個SQL查詢合併成一個,但問題是,這兩個查詢具有GROUP BY在裏面。

查詢1:

SELECT COUNT(users_survey_answers.ultimate_survey_code) 
FROM  company, 
     users_codes, 
     users_survey_answers 
WHERE company.company_id = users_codes.company_id 
    AND users_codes.email = "[email protected]" 
    AND users_codes.company_id = users_survey_answers.company_id 
    AND users_survey_answers.completed = 0 
GROUP BY users_codes.company_id 

查詢2:

SELECT COUNT(users_rewards.reward_id) 
FROM  company, 
     users_codes, 
     users_rewards 
WHERE company.company_id = users_codes.company_id 
    AND users_codes.email = "[email protected]" 
    AND users_rewards.company_id = users_codes.company_id 
    AND redeemed = 0 
GROUP BY users_codes.company_id 

我欣賞的幫助。我已經嘗試了很多解決方案,仍然沒有幫助。

謝謝。

+0

兩個查詢按相同的字段組合 - 問題是什麼? –

+1

您是否嘗試過使用UNION ALL? – Nertim

回答

1

試試這個:

SELECT company.company_id, 
      users_pts.pts as CompanyPts, 
      t1.ultimate_survey_code_count, 
      t2.reward_id_count 
FROM  company, 
      users_codes 
INNER JOIN (
      SELECT 
       company_id, 
       COUNT(ultimate_survey_code) AS ultimate_survey_code_count 
      FROM users_survey_answers 
      WHERE completed = 0 
      GROUP BY company_id 
     ) AS t1 
     ON users_codes.company_id = t1.company_id 
INNER JOIN (
      SELECT 
       company_id, 
       SUM(IF(redeemed = 0, 1, 0)) AS reward_redeem_zero_count, 
       SUM(IF(redeemed = 0, 0, 1)) AS reward_redeem_not_zero_count 
      FROM users_rewards 
      GROUP BY company_id 
     ) AS t2 
     ON users_codes.company_id = t2.company_id 
INNER JOIN users_pts 
     ON users_codes.company_id = users_pts.company_id 
WHERE  company.company_id = users_codes.company_id 
    AND  users_codes.email = "[email protected]" 

這是未經測試,但希望能滿足您的需要。

+0

雙方的工作,謝謝。 – user1025013

+0

當然!不客氣:) – SubRed

+0

快速問題:你能幫我弄清楚如何在原始問題中加入2個查詢以及這1個查詢嗎? SELECT點爲CompanyPts FROM users_pts,users_codes WHERE users_codes.company_id = users_pts.company_id AND users_codes.email = [email protected] – user1025013

1

我把增加 company_id到選擇的libery。如果事後不能說出哪個公司屬於哪個結果,那麼通過company_id進行分組有什麼好處。 :)

select 
    company_id, 
    sum(code_count) as code_count, 
    sum(reward_count) as reward_count 
FROM 
    (SELECT 
     users_codes.company_id, 
     COUNT(users_survey_answers.ultimate_survey_code) as code_count, 
     null as reward_count 
    FROM  company, 
      users_codes, 
      users_survey_answers 
    WHERE company.company_id = users_codes.company_id 
     AND users_codes.email = "[email protected]" 
     AND users_codes.company_id = users_survey_answers.company_id 
     AND users_survey_answers.completed = 0 
    GROUP BY users_codes.company_id 
    UNION ALL 
    SELECT 
     users_codes.company_id, 
     COUNT(users_rewards.reward_id) as reward_count, 
     null 
    FROM  company, 
      users_codes, 
      users_rewards 
    WHERE company.company_id = users_codes.company_id 
     AND users_codes.email = "[email protected]" 
     AND users_rewards.company_id = users_codes.company_id 
     AND redeemed = 0 
    GROUP BY users_codes.company_id) x 
GROUP BY 
    company_id 

太麻煩了。你可以這樣寫。 我還冒昧地引入了更現代的INNER JOIN以及鋸齒,但隨時可以恢復。

SELECT 
    c.company_id, 
    (SELECT COUNT(ultimate_survey_code) 
    FROM 
    users_survey_answers a 
    WHERE 
    a.completed = 0 AND 
    a.company_id = c.company_id) as answer_count, 
    (SELECT COUNT(ultimate_survey_code) 
    FROM 
    users_rewards r 
    WHERE 
    r.redeemed = 0 AND 
    r.company_id = c.company_id) as reward_count 
FROM 
    company c 
    INNER JOIN users_code uc ON uc.company_id = c.company_id 
WHERE 
    uc.email = "[email protected]" 
GROUP BY 
    c.company_id 
+0

嗨,感謝您的快速回復。它是給我行1和行2作爲NULL在reward_count – user1025013

+0

是的,抱歉。畢竟,我認爲這是相當混亂的。我發佈了一個全新的查詢。 – GolezTrol

+0

它需要是users_codes而不是users_code .....非常感謝MAN!我非常感謝幫助。我想我明天就能幸運地得到1個答覆。 – user1025013