2012-09-10 52 views
0

請參閱下面的SQL:將2個或更多結果合併在一起?

SELECT M.username, count(*) as Total, date(status_date) as Date FROM com_result 
    LEFT JOIN members as M on M.member_id = com_result.member_id 
GROUP BY date(status_date), com_result.member_id Order By status_date DESC 

這將顯示在DATEmember_id

例結果記錄基地的總數:

+----------+-------+------------+ 
| username | Total | DATE  | 
+----------+-------+------------+ 
| bx7  |  3 | 2012-09-10 | 
| bx2  | 25 | 2012-09-04 | 
| bx2  | 401 | 2012-09-03 | 
| bx1  | 703 | 2012-09-02 | 
| bx4  | 1075 | 2012-09-02 | 
+----------+-------+------------+ 

它工作得很好,現在我想合併/結合到另一個相同的表格結構。 二SQL:

SELECT M.username, count(*) as Total, date(status_date) as Date FROM com_result_b 
    LEFT JOIN members as M on M.member_id = com_result_b.member_id 
GROUP BY date(status_date), com_result_b.member_id Order By status_date DESC 

假設從com_result結果將是:

| bx2 | 25 | 2012-09-04 | 

而且從com_result_b結果將是:

| bx2 | 50 | 2012-09-04 | 

所以,當合並/聯合 - 我想要結果如下:

| bx2 | 75 | 2012-09-04 | 

正如您所見,Total的值從兩個表中的相同日期增加。如何做到這一點?

回答

1

隨着SUM

select username,SUM(Total) , DATE 
(
    SELECT M.username, count(*) as Total, date(status_date) as Date FROM com_result_b 
     LEFT JOIN members as M on M.member_id = com_result.member_id 
    GROUP BY date(status_date), com_result.member_id 
    UNION ALL 
    SELECT M.username, count(*) as Total, date(status_date) as Date FROM com_result_b 
     LEFT JOIN members as M on M.member_id = com_result_b.member_id  
    GROUP BY date(status_date), com_result_b.member_id 
) v 

group by username, date 
+0

這似乎很好,謝謝! –

0

試試這個:

做最簡單的方法是:

你只需要把這兩個結果在派生表與UNION ALL操作

SELECT username,SUM(Total),Date 
FROM (
     SELECT M.username, count(*) as Total, date(status_date) as Date 
     FROM com_result 
     LEFT JOIN members as M on M.member_id = com_result.member_id 
     GROUP BY date(status_date), com_result.member_id 
     union all 
     SELECT M.username, count(*) as Total, date(status_date) as Date 
     FROM com_result_b 
     LEFT JOIN members as M on M.member_id = com_result_b.member_id 
     GROUP BY date(status_date), com_result_b.member_id)a 
GROUP BY username,Date 
ORDER BY Date DESC 
1
SELECT X.username, SUM(X.Total) AS TOTAL , X.Date 
FROM(SELECT ... FROM com_result Union Select .. From com_result_b)X 
GROUP BY X.username, X.Date 
2
SELECT 
    username, 
    IF(q1.Total IS NULL,0,q1.Total)+IF(q2.Total IS NULL,0,q2.Total) AS Total, 
    q1.Date 
FROM (
    SELECT member_id, M.username, count(*) as Total, date(status_date) as Date 
    FROM com_result 
    LEFT JOIN members as M on M.member_id = com_result.member_id 
    GROUP BY date(status_date), com_result.member_id 
) AS q1 
LEFT JOIN (
    SELECT member_id, M.username, count(*) as Total, date(status_date) as Date 
    FROM com_result_b 
    LEFT JOIN members as M on M.member_id = com_result_b.member_id 
    GROUP BY date(status_date), com_result_b.member_id 
) AS q2 ON q1.member_id=q2.member_id AND q1.Date=q2.Date 
ORDER BY q1.Date DESC 
+0

謝謝你的回答,你爲什麼看起來比其他答案更復雜? –

+0

因爲我試圖捕獲所有可能的NULL情況,並仍然避免一個UNION。如果可以得到幫助,我不是MySQL上UNION的朋友 –