【问题标题】:Getting ROLLUP or sum of Count() in a new filed in mySQL在 mySQL 的新字段中获取 ROLL UP 或 Count() 的总和
【发布时间】:2015-11-19 12:29:33
【问题描述】:

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

   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

我想要的是计数字段旁边的 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 列,我可以不用在查询中汇总。我显示的最后一个结果是我希望查询结果如何(如果有帮助,则无需汇总)。
  • 你的主键是什么?
  • 我没有在表中设置任何主键。

标签: mysql count sum rollup


【解决方案1】:

这是一个不寻常的请求。由于rollup,您无法在第三列使用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;

【讨论】:

  • 作为一个魅力伙伴工作......非常感谢......我知道我想要的东西看起来很不寻常,但需要这种类型的数据来创建一些视觉效果。
  • 正是我想要的。谢谢!
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2019-09-26
  • 2020-04-15
  • 1970-01-01
相关资源
最近更新 更多