【问题标题】:mysql sum questionmysql求和问题
【发布时间】:2011-09-16 20:53:52
【问题描述】:

是否可以使用一个查询获得一列和所有列本身的总和? 我的意思是,我也需要 SUM(Result.num) 和单独的 Result.num,但我不想为此目的使用两个单独的查询?想法结果可能是 SUM 作为结果中的另一列。 结果可能如下所示: col1 结果.num1,总和 结果.num2,总和 结果.num3,总和 ....

 SELECT SUM(Result.num) 
   FROM (SELECT COUNT(colA) AS num 
           FROM Table1 
       GROUP BY colB) AS Result;

 SELECT Result.num 
   FROM (SELECT COUNT(colA) AS num 
           FROM Table1 
       GROUP BY colB) AS Result;

【问题讨论】:

  • 为什么不使用两个查询?您希望如何表示您的结果?

标签: mysql sql aggregate-functions


【解决方案1】:

答案是您将执行两条语句,但您可以在一个结果集中返回结果。您可以使用 UNION ALL 语句来做到这一点。只需接受您的两个查询并在它们之间放置一个UNION ALL 语句。它看起来像这样:

 SELECT Result.num 
   FROM (SELECT COUNT(colA) AS num 
           FROM Table1 
       GROUP BY colB) AS Result;
 UNION ALL
 SELECT SUM(Result.num) 
   FROM (SELECT COUNT(colA) AS num 
           FROM Table1 
       GROUP BY colB) AS Result;

我改变了顺序,以便您的 SUM 值位于末尾,但如果您愿意,可以将其放在开头。

【讨论】:

  • mysql会执行两次子查询得到结果集吗?
  • 子将在联合的每一侧执行一次,所以......是的
【解决方案2】:

很确定您只需要union您的查询

 SELECT SUM(Result.num) FROM (SELECT COUNT(colA) AS num FROM Table1 group by colB) AS Result
union all
 SELECT Result.num FROM (SELECT COUNT(colA) AS num FROM Table1 group by colB) AS Result;

【讨论】:

    【解决方案3】:

    WITH ROLLUP 子句在这里可能对您有用。

    http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2011-12-24
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多