MySQL-如何获取字段计数的总和?

MySQL-如何获取字段计数的总和?,mysql,count,sum,Mysql,Count,Sum,我使用下面的语句,得到了几乎所有我需要的东西。另外,我想得到所有行的总和 SELECT c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger, COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain, SUM(c.amount) as row_total FROM campaigns c JOIN campaign

我使用下面的语句,得到了几乎所有我需要的东西。另外,我想得到所有行的总和

    SELECT c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger,
COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain,
SUM(c.amount) as row_total
FROM campaigns c
JOIN campaign_codes cc
LEFT JOIN partners p on p.id = 4
WHERE c.partner_id = 4 AND cc.status = 0 AND c.id = cc.campaign_id
GROUP BY c.id
ORDER BY campaign_amount ASC
下面是一个示例结果,最后一列是我要添加到一起的列:

    1 10.00 30 992 24 9920.00
    3 25.00 30 995 290 24875.00
    16 50.00 30 988 335 49400.00
    17 100.00 30 1000 335 100000.00

将您的查询封装为:

SELECT SUM([row_total]) FROM (
Your query
) Source
从下面的评论中,您可以尝试

Your Query
UNION ALL
SELECT '', '', '', '', '', SUM([row_total]) FROM (
Your query
) Source

union all将允许您向结果集中追加一行,这将为您提供一个“总计行”。您可以更改空字段(单引号)以匹配您的数据类型,也可以为它们指定表示总行的特殊值。

要获取运行总和:

SELECT TB.campaign_id, TB.campaign_amount, TB.warning_trigger, TB.code_count,  TB.days_remain, TB.row_total, SUM(TB.row_total) GlobalTotal FROM (SELECT c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger,
COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain,
SUM(c.amount) as row_total
FROM campaigns c
JOIN campaign_codes cc
LEFT JOIN partners p on p.id = 4
WHERE c.partner_id = 4 AND cc.status = 0 AND c.id = cc.campaign_id
GROUP BY c.id
ORDER BY campaign_amount ASC) TB
GROUP BY TB.campaign_id, TB.campaign_amount, TB.warning_trigger, TB.code_count,  TB.days_remain, TB.row_total
SELECT  c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger,
        COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain,
        SUM(c.amount) as row_total, @r := @r + SUM(c.amount) AS running_sum
FROM    (
        SELECT  @r := 0
        ) vars,
        campaign c, … 
要将总计(以及所有其他合计)作为附加记录,请执行以下操作:

SELECT  *
FROM    (
        SELECT  c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger,
                COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain,
                SUM(c.amount) as row_total
        FROM    campaign c, … 
        GROUP BY
                c.id WITH ROLLUP
        ) q
ORDER BY
        campaign_amount ASC
要获取附加字段中的总和,请执行以下操作:

        SELECT  c.id AS campaign_id, c.amount AS campaign_amount, c.warning_trigger,
                COUNT(cc.id) as code_count, DATEDIFF(c.end_date, CURDATE()) as days_remain,
                SUM(c.amount) as row_total,
                (
                SELECT  SUM(c.amount)
                FROM    campaign c, …
                -- the same but without the GROUP BY and ORDER BY clauses. 
                )
        FROM    campaign c, …
        GROUP BY
                c.id
        ORDER BY
                campaign_amount ASC

是否要同时显示示例中当前显示的数据和最后一列值的总和?如果是:您不能在应用程序层对值求和吗?是的,我需要显示的数据和最后一列值的总和。我可以将它添加到控制器或视图层中,但我认为它最适合模型。如果我不使用orderby,它会工作得很好,否则orderby会抛出一个错误:CUBE/ROLLUP和ORDER的用法不正确BY@k00k:当然,我忘了。只需将其包装到嵌套查询中。我会更新帖子的。@snoi:谢谢,效果很好。虽然现在我想如果汇总不是一个额外的记录,而是一个额外的字段会更好。这将有助于我的视图层,因此我不会在foreach()循环中显示值。可能吗?在阅读了更多关于汇总的内容后,我认为不可能将汇总值放在新字段中。现在我将使用这个解决方案,尽管ORDER BY很麻烦,因为很难按照我想要的方式进行按摩。现在我正在检查视图层上是否有空值。@Quassnoi:您的最后一个示例非常有效,谢谢!被选中的!对,但那只会给我总数,而不会给其他信息,对吗?你不想保留其他信息,你想要所有信息的总数,那么就没有办法合并其余的行。如果你想得到每一行的总和,只需将总和(行)反复相加。等等,你想为总数单独列一行吗?是的,我想在结果中保留其他信息。我想为总数设置一个单独的/附加的字段。@Tufo:这只会给我总数,而不会给我所有的示例结果(我需要)。明白了,你打算对两者都做一些百分比,hun?我已经编辑了代码,请立即尝试,它会引发以下错误:如果没有GROUP BY子句,则将GROUP列(MIN()、MAX()、COUNT()、…)与任何GROUP列混合是非法的。错误已消失,但全局总计的值与行总和的值相同。