2

在伪代码中我想完成这个:

select 
count(groupA) as gA,
count(groupB) as gB,
count(groupC) as gC,
sum(gA,gB,gC) as groupABCTotal

但是我尝试过的各种方法都导致了语法错误。在不重新选择总和的组计数的情况下实现这一目标的正确方法是什么?

4

1 回答 1

2

如果要将总和作为另一列输出,则必须以一种或另一种方式重新选择组成列。

我觉得这相当易读:

SELECT d.*, gA+gB+gC AS groupABCTotal
FROM (SELECT COUNT(groupA) AS gA,
             COUNT(groupB) AS gB,
             COUNT(groupC) AS gC
        FROM tbl) d;

但这也有效,如您所知:

SELECT COUNT(groupA) AS gA,
       COUNT(groupB) AS gB,
       COUNT(groupC) AS gC,
       COUNT(groupA)+COUNT(groupB)+COUNT(groupC) AS groupABCTotal
 FROM tbl;

现在,MySQL 可能足够聪明,不会重新计算冗余聚合,因此 COUNT(groupA) 在上面的第二种形式中只计算一次。

于 2013-08-30T17:24:26.200 回答