如何根据不同的标准做两个MySQL SUM

时间:2015-03-01 14:38:24

标签: php mysql sql database sum

我有6张彼此相关的表格。我有一个JOIN查询收集所有数据。我首先提供cpv_id作为来自用户的变量,然后最后我需要获得与该cpv_id相关的每个公司的报告(通过它们之间的许多表)。

基本上,这就是流程:

我从用户那里得到 cpv_id ,我在 club_offer_cpv 表中找到它,我得到 club_offer_id 所以我可以连接到 club_offer < / strong>表。然后在 club_offer 表中,我得到 club_id ,这样我就可以连接到 club 表了。然后在分会表中,我获得 users_id ,以便我可以连接到用户表。然后在用户表中,我得到 company_id ,以便我可以连接到公司表。在公司表格中,我获得了 special_id ,因此我可以连接到最后一个表 company_reports 。这是我需要从中获取数据的地方。我需要这个:

这里我有3个感兴趣的领域: report_year variable_code variable_value

report_year 存储公司报告的年份 variable_code 存储已制作的报告类型。在我关于SQL Fiddle的简化示例中,可能的值是 AOP 605 AOP 201 variable_value 存储每个variable_code的值。例如, AOP 605 代码的值为 5

我遇到了麻烦:我需要为属于某个cpv_id组(来自用户请求)的所有公司的每个variable_code求和variable_value。我只设法创建将一个代码的值加起来的查询。您可以在SQL Fiddle中看到:http://sqlfiddle.com/#!2/a3e296/2

在输出中,您将看到我正在为代码 AOP 201 执行totalSum,而在我的应用程序中,我正在执行另外一个查询以计算 AOP 605 的总和,但我认为这并不理想,并且可能有一些方法可以在同一查询中获得 AOP 201 AOP 605 的SUM。我可以调用它们然后sum201和sum605并在我的应用程序中显示它们。有人可以告诉我这是否可能?你能告诉我收集 AOP 201 AOP 605 的总和的查询,并将它们存储在不同的值中,这样我就能显示 AOP 201的总和 AOP 605 ???

还有一个棘手的部分。正如您在我的查询中所看到的,我遇到了这种情况:AND company_report.report_year = 2013。这并不理想,因为有些公司将不会在2013年制作报告,其中一些公司仅在2012年报告。我将不得不采取他们所拥有的报告的最后一年。因此,例如,如果一些公司在2012年和2013年有报告,我将只计算2013年的数量。同样,如果其他公司有2009年和2012年的报告,我将只计算2012年的数量。

你能帮我解决这个问题吗?

我现在正在为此奋斗3天,并且无法找到解决方案。谢谢你的时间。

编辑:我需要 AOP 605 AOP 201 的总和作为单独的列,所以我可以在我的应用程序代码中访问它们,如$ sumOne - 显示<的总和strong> AOP 605
和$ sumTwo - 显示 AOP 201 的总和。

更多信息:我正在尝试将这两个查询合并为一个:

SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
                                         FROM company_report
                                         JOIN company        ON company_report.special_id = company.special_id 
                                         JOIN users          ON company.id = users.company_id 
                                         JOIN club           ON users.id = club.users_id
                                         JOIN club_offer     ON club.id = club_offer.club_id
                                         JOIN club_offer_cpv ON club_offer.id = club_offer_id 
                                                             AND club_offer_cpv.cpv_id LIKE '66%'
                                                             AND company_report.variable_code = 'AOP 201'
                                                             AND company_report.report_year = 2013

SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
                                         FROM company_report
                                         JOIN company        ON company_report.special_id = company.special_id 
                                         JOIN users          ON company.id = users.company_id 
                                         JOIN club           ON users.id = club.users_id
                                         JOIN club_offer     ON club.id = club_offer.club_id
                                         JOIN club_offer_cpv ON club_offer.id = club_offer_id 
                                                             AND club_offer_cpv.cpv_id LIKE '66%'
                                                             AND company_report.variable_code = 'AOP 605'
                                                             AND company_report.report_year = 2013

请注意每个查询中的这些行:

company_report.variable_code = 'AOP 605'

company_report.variable_code = 'AOP 201'

因此,在一个查询中,我希望获得具有variable_code =&#34; AOP 605&#34;的行的variable_value的总和,并且在第二个中,我需要获得具有variable_code =&#34; AOP 201&的行的variable_value的总和#34 ;.但我认为必须有一些方法可以在一个查询中获得两个总和,但是我可以单独显示它们的方式,例如:

AOP 605的总和是:123
AOP 201的总和是:345

1 个答案:

答案 0 :(得分:1)

你似乎在寻找SELECT的GROUP BY部分,如下所示:

SELECT DISTINCT company_report.*, floor(sum(variable_value)) as totalSum
FROM company_report
JOIN company        ON company_report.special_id = company.special_id 
JOIN users          ON company.id = users.company_id 
JOIN club           ON users.id = club.users_id
JOIN club_offer     ON club.id = club_offer.club_id
JOIN club_offer_cpv ON club_offer.id = club_offer_id 
                    AND club_offer_cpv.cpv_id LIKE '66%' 
                    AND company_report.variable_code IN ('AOP 201','AOP 605')
                    AND company_report.report_year = 2013
GROUP BY company_report.variable_code                    
是吗?