2013-08-22 107 views
0

我需要一個MySQL查詢的幫助,我一直在努力完成。我相信這不是很難弄清楚,但我只是看不到它。不止一次地總結一列MySQL

我需要再次SUM一列,即使它已經運行一次並存儲該值並將其顯示在旁邊的新列中?

此查詢顯示2個單獨的記錄行,'fcpd'和'CPDTotal'列是此問題的主要部分。列'CPDTotal'的第1行記錄的值爲0.5,第2行。我需要做的就是取0.5 + 0.5給我總數爲1,並在執行後顯示在新列中。

SELECT 
    mdl_user_info_data.data, 
    mdl_user.firstname, 
    mdl_user.lastname, 
    mdl_grade_grades.itemid, 
    mdl_grade_items.itemname, 
    mdl_user_info_data.id, 
    mdl_grade_grades.timecreated AS DATE, 
    mdl_quiz.fcpd, 
    SUM(mdl_quiz.fcpd) as CPDTotal 
    FROM mdl_grade_grades 

    INNER JOIN mdl_user ON mdl_grade_grades.userid = mdl_user.id 
    INNER JOIN mdl_grade_items ON mdl_grade_grades.itemid = mdl_grade_items.id 
    INNER JOIN mdl_quiz ON mdl_grade_items.itemname = mdl_quiz.name 
    INNER JOIN mdl_course ON mdl_grade_items.courseid = mdl_course.id 
    INNER JOIN mdl_user_info_data ON mdl_user.id = mdl_user_info_data.userid 


    WHERE mdl_user_info_data.fieldid = 1 
    AND mdl_grade_items.itemname IS NOT NULL 
    AND mdl_user.annualCPDReportActive = 'Y' 
    AND mdl_user.id = 1025 
    AND (mdl_course.category = 27) 
    GROUP BY mdl_user.firstname, 
    mdl_user.lastname, 
    mdl_user_info_data.data, 
    mdl_grade_items.itemname 

回答

0

您可以通過招實現,在MySQL的 - WITH ROLLUP

SELECT 
mdl_user_info_data.data, 
mdl_user.firstname, 
mdl_user.lastname, 
mdl_grade_grades.itemid, 
mdl_grade_items.itemname, 
mdl_user_info_data.id, 
mdl_grade_grades.timecreated AS DATE, 
mdl_quiz.fcpd, 
SUM(mdl_quiz.fcpd) as CPDTotal 
FROM mdl_grade_grades 

INNER JOIN mdl_user ON mdl_grade_grades.userid = mdl_user.id 
INNER JOIN mdl_grade_items ON mdl_grade_grades.itemid = mdl_grade_items.id 
INNER JOIN mdl_quiz ON mdl_grade_items.itemname = mdl_quiz.name 
INNER JOIN mdl_course ON mdl_grade_items.courseid = mdl_course.id 
INNER JOIN mdl_user_info_data ON mdl_user.id = mdl_user_info_data.userid 


WHERE mdl_user_info_data.fieldid = 1 
AND mdl_grade_items.itemname IS NOT NULL 
AND mdl_user.annualCPDReportActive = 'Y' 
AND mdl_user.id = 1025 
AND (mdl_course.category = 27) 
GROUP BY mdl_user.firstname, 
mdl_user.lastname, 
mdl_user_info_data.data, 
mdl_grade_items.itemname 
WITH ROLLUP 

這不會爲您提供一個新列,但你的結果將包含各組後在相應的總結行。

+0

謝謝,這項工作,但它創造了3個更多的空記錄和性能明智我已經在膝蓋deep.Any關於如何刪除重複記錄的建議? – mrAfzaL

+0

'NULL'-s將用於非組列。他們對整體表現影響甚微。 –

+0

太棒了,我會嘗試用COALESCE刪除NULL記錄,但時間明智的,這是我需要的。謝謝! – mrAfzaL

0

我可能會誤解它,但如果這個值沒有改變,你可以乘以2也許?

+0

謝謝,我已經考慮過這一點,但價值總是在變化。 – mrAfzaL

+0

他們如何改變?我的意思是除非更新,插入或發生什麼,它將是相同的,並且在你的方式之間的兩個查詢之間沒有延遲。服務器不會迴應別人,除非它完成你的查詢,所以我不確定,但它可能不會改變。 – Kuzgun

+0

我們有一個外部派對,它將在系統的前端(OOP PHP系統),可以隨時更改數據庫信息,所以我的查詢必須圍繞這個建立。我明白你的意思,我不會發布這個問題如果我沒有涵蓋我所有的資源。 – mrAfzaL