2013-08-22 56 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