Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取mySQL中新字段中Count()的汇总或总和_Mysql_Count_Sum_Rollup - Fatal编程技术网

获取mySQL中新字段中Count()的汇总或总和

获取mySQL中新字段中Count()的汇总或总和,mysql,count,sum,rollup,Mysql,Count,Sum,Rollup,我有一个表,其中需要对一列进行计数,然后按另一列对其进行分组,然后在计数旁边的新字段中获取每组计数的总值。 我添加了一些数据来准确解释我想要的: CREATE TABLE tablename ( ID INTEGER, NAME VARCHAR (10), TAG1 INTEGER, TAG2 INTEGER ); INSERT INTO tablename VALUES (1, 'A', 1, 2), (1, 'A', 2, 5), (1, 'B', 1, 4), (

我有一个表,其中需要对一列进行计数,然后按另一列对其进行分组,然后在计数旁边的新字段中获取每组计数的总值。 我添加了一些数据来准确解释我想要的:

   CREATE TABLE tablename (
  ID INTEGER,
  NAME VARCHAR (10),
  TAG1 INTEGER,
  TAG2 INTEGER
);

INSERT INTO tablename VALUES 
(1, 'A', 1, 2),
(1, 'A', 2, 5),
(1, 'B', 1, 4),
(1, 'D', 3, 7),
(1, 'C', 5, 6),
(2, 'A', 1, 2),
(2, 'A', 2, 5),
(2, 'A', 2, 5),
(2, 'B', 1, 4),
(2, 'D', 3, 7),
(2, 'C', 5, 6),
(3, 'A', 1, 2),
(3, 'A', 2, 5),
(3, 'B', 1, 4),
(3, 'D', 3, 7),
(3, 'A', 1, 2),
(4, 'A', 2, 5),
(4, 'B', 1, 4),
(4, 'D', 3, 7),
(4, 'D', 5, 6),  
(4, 'C', 5, 6);
我使用了查询:

select ID
     , ifnull(NAME,Concat(ifnull(NAME,'TOTAL - '), ID)) NAMES
     , sum(case when (TAG1>0 and TAG2>0) then 1 else 0 end) Cnt 
  from tablename 
 group 
    by ID
     , NAME with rollup;
我得到的是:

ID NAME Cnt 
1   A    2
1   B    1
1   C    1
1   D    1
1  Total 5
2   A    3
2   B    1
2   C    1
2   D    1
2  Total 6
3   A    3
3   B    1
3   D    1
3  Total 5
我想要的是count字段旁边的sum()字段

差不多

ID NAME Cnt Sum
1   A    2   5
1   B    1   5
1   C    1   5
1   D    1   5
1  Total 5   5
2   A    3   6
2   B    1   6 
2   C    1   6
2   D    1   6
2  Total 5   6
3   A    3   5
3   B    1   5
3   D    1   5
3  Total 5   5

有什么建议吗?

这是一个不寻常的要求。使用第三列的
sum()
无法获得所需内容,因为
汇总
。因此,使用子查询:

select t.ID, coalesce(NAME, concat('TOTAL - ', t.ID), t.ID)) as NAMES,
       sum(t.TAG1 > 0 and t.TAG2 > 0) as Cnt,
       max(tt.sumcnt) as `sum`
from tablename t join
     (select id, sum(TAG1 > 0 and TAG2 > 0) as sumcnt
      from tablename t
      group by id
     ) tt
     on t.id = tt.id
group by t.ID, t.NAME with rollup;

为什么需要列和行中的值?另外,您的最终结果看起来不正确。如果我能得到如图所示的sum列,我可以在查询中不使用汇总。我显示的最后一个结果是我希望查询结果如何(如果有帮助,则不使用汇总)。您的主键是什么?我没有在表中设置任何主键。我曾作为魅力伴侣工作过…非常感谢…我知道我想要的似乎不寻常,但需要这种类型的数据来创建一些视觉效果。这正是我想要的。谢谢!