gpt4 book ai didi

mysql - 在 mySQL 的新字段中获取 ROLL UP 或 Count() 总和

转载 作者:行者123 更新时间:2023-11-29 21:49:23 25 4
gpt4 key购买 nike

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

   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

有什么建议吗???

最佳答案

这是一个不寻常的请求。由于 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;

关于mysql - 在 mySQL 的新字段中获取 ROLL UP 或 Count() 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com