2013-08-23 190 views
0

我希望這是可能的MYSQL,我用PHP腳本。MYSQL MULTIPLE COUNT AND SUM

我想在table1上根據每個月基於個別條件和分組創建多個SUM值和COUNT列。這些表格已通過會議加入。 我有兩個表monthlyreport(table1)&播種機(表2)。

期望的結果是在表格1

月報(表1)

REPORTID|ACCOUNTID|COMPMONTH|SUMtoDATE|COUNTtoDATE|SUMcompDATE|COUNTcompDATE| 
1  | 190  | JAN | 150  |  2  | 150  |  2  | 
2  | 190  | FEB |  0  |  0  | 100  |  1  | 

花盆(表2)

PlanterID | ACCOUNTID |PLANTER | SALARY | compDATE | toDATE | 
1   | 190 | aaa | 100 | Jan-1-2013 | Jan-05-2013 | 
2   | 190 | bbb | 50 | Jan-9-2013 | Jan-12-2013 | 
3   | 190 | aaa | 100 | Feb-1-2013 | Mar-12-2013 | 
4   | 190 | bbb |  0 | Mar-5-2013 | Mar-12-2013 | 

與內一個單一的查詢加入已經工作,但如果我同時運行,我什麼也得不到,因爲如果可能的話,我似乎無法得到邏輯。

這是我到目前爲止從stackoverflow但獲取錯誤。 希望有人可以重構或使其工作。

SELECT *, 
(
SELECT COUNT(planters.todate), SUM(planters.todate) 
FROM monthlyreport 
INNER JOIN planters ON monthlyreport.accountid = planters.accountid 
WHERE monthlyreport.accountid = 190 AND MONTH(monthlyreport.compmonth) = MONTH(planters.todate) 
GROUP BY monthlyreport.mthreportid, month(planters.todate) 
) AS count_1, 

(
SELECT COUNT(planters.compdate), SUM(planters.compdate) 
FROM monthlyreport 
INNER JOIN planters ON monthlyreport.accountid = planters.accountid 
WHERE monthlyreport.accountid = 190 AND MONTH(monthlyreport.compmonth) = MONTH(planters.compdate) 
GROUP BY monthlyreport.mthreportid, month(planters.compdate) 
) AS count_2 
+0

結果中期望的字段是什麼?從查詢中看起來您想要所有字段,但對我來說沒有任何商業意義,您能解釋一下 – skv

+0

請參閱表1.我希望得到count的sql結果並在那裏分組。 SUMtoDATE | COUNTtoDATE | SUMcompDATE | COUNTcompDATE是查詢的總和和結果。 – user2698446

+0

你可以共享這兩個表的模式嗎? – shola

回答

0

它不是很清楚,但據我所知,你想要的是在一個查詢結果中得到兩個結果。嘗試從兩個表中的accountID的基礎上加入它們。AS:

SELECT * 
from 
(select accountID,COUNT(planters.todate) as count2date, SUM(planters.todate) as sum2date 
----- 
-----) count_1 
inner join 
(SELECT accountID,COUNT(planters.compdate) as countcomp, SUM(planters.compdate) as sumcomp 
----- 
-----) count_2 
using(accountID); 

不要在count_1或count_2之前使用「AS」。將外部select查詢中的*替換爲更具體的屬性(如count_1.count2date或類似)會更好。

希望這會有所幫助!如果你還在找什麼,請告訴我。

----- ----- UPDATE

看你的檔案你上傳文件後,我想出了以下查詢:

SELECT count1.compmonth, IFNULL(todatecount, 0) , IFNULL(todatesum, 0) , IFNULL(  compdatecount, 0) , IFNULL(compdatesum, 0) 
FROM count_1 
LEFT JOIN count_2 ON count_1.compmonth = count_2.compmonth 
UNION 
SELECT count2.compmonth, IFNULL(todatecount, 0) , IFNULL(todatesum, 0) , IFNULL(compdatecount, 0) , IFNULL(compdatesum, 0) 
FROM count_1 
RIGHT JOIN count_2 ON count_1.compmonth = count_2.compmonth 

可以格式化0的,按您的希望。另外,如果數據庫平臺支持「完全外部連接」,則可以使用該平臺而不是進行左右連接的聯合。

你將不得不用來替換 「FROM COUNT_1」:
FROM (select accountID,COUNT(planters.todate) as count2date, SUM(planters.todate) as sum2date ----- -----) count_1

同樣,對於FROM count_2。我知道這看起來像一個巨大的查詢,但所有這一切都是在常見日期連接2個表,並且所有其他不匹配的字段都指定爲NULL。

+0

嗨,感謝迄今爲止的貢獻,我堅信這是可能的!是! @Rijul two(count,sum)在單個查詢中,我認爲如果我加入前兩個。如果todate的月份是1月份,而compdate不是,它會顯示零(0)以在我的主要單個查詢(MONTHLYREPORT)上進行調試,反之亦然。嗨,Rijul!我試過了你的查詢,但是出現錯誤,認爲我只是沒有做好。 – user2698446

+0

@ user2698446,如果你能分辨出錯誤的性質,那將更加清楚。也許,我可以幫助解決方案。 – Rijul

+1

請從這裏下載並查看我的數據。 http://www.megafileupload.com/en/file/444693/tablesFORmultipleCOUNTandSUM-xlsx.html – user2698446