gpt4 book ai didi

MySQL:按二进制变量的总和对行进行分组

转载 作者:行者123 更新时间:2023-11-29 10:18:19 25 4
gpt4 key购买 nike

我有一个表,我想通过定义组结尾的二进制变量group_generator进行分组:如果它等于1,则该组包含所有先前的行与 group_generator = 0

示例:

Numbers        group_generator    
10 0
20 0
30 1
40 0
50 1
60 1

我需要将数字分为三组:

(10, 20, 30); 
(40, 50);
(60)

我尝试为索引小于当前索引的所有行创建一个包含 group_generator 总和的新列,如下所示:

Numbers        group_generator    group
10 0 0
20 0 0
30 1 0
40 0 1
50 1 1
60 1 2

并按最后一列进行分组,但是如果没有临时表,那就很复杂。

在 MySQL 中有一个简单的方法吗?

最佳答案

获得新列后,此查询将为您提供所需的结果:

SELECT GROUP_CONCAT(Numbers) FROM table GROUP BY `group`

输出:

group_concat(numbers)
10,20,30
40,50
60

所以整个查询可能是:

SELECT GROUP_CONCAT(Numbers),
(SELECT IFNULL(SUM(group_generator), 0) FROM table1 t2 WHERE t2.id < table1.id) AS `group`
FROM table1
GROUP BY `group`

输出

group_concat(Numbers)   group
10,20,30 0
40,50 1
60 2

您还可以使用存储过程生成此输出:

DELIMITER //
drop PROCEDURE if EXISTS groupit
//
create procedure groupit()
begin
declare num int;
declare numgroup varchar(1024) default '';
declare gnum int default 0;
declare pid int default 1;
declare gg int;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET gg = -1;

repeat
select group_generator, Numbers into gg, num from table2 where id=pid;
if (gg >= 0) then
set numgroup = concat(numgroup, if(numgroup='', '', ','), num);
if (gg = 1) then
select numgroup, gnum;
set numgroup = '';
set gnum = gnum + 1;
end if;
end if;
set pid=pid+1;
until gg = -1
end repeat;
end
//
delimiter ;

关于MySQL:按二进制变量的总和对行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770656/

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