clear markdown compare help donate or buy diddy dollings comments/suggestions/bugs a leap of faith? bible365
clear markdown donate comments/suggestions/bugs a leap of faith? bible365 diddy dollings
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0. 818513 fiddles created (9177 in the last week).

CREATE TABLE IF NOT EXISTS `example_table` ( `id` int unsigned NOT NULL, `name` varchar(200) NOT NULL, `category` varchar(200) NOT NULL, `option_a` varchar(200) NULL, `option_b` varchar(200) NULL, `option_c` varchar(200) NULL, `option_d` varchar(200) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8;
 hidden batch(es)


INSERT INTO `example_table` (`id`, `name`, `category`, `option_a`, `option_b`, `option_c`, `option_d`) VALUES -- Записи 1,2 должны быть сгруппированы только по полю option_a и -- проигнорированы(исключены) для группировки по остальным полям, несмотря на то, что также могут быть -- сгруппированы по полям option_b, option_c, option_d(#2) ('1', 'Запчасть (поле A)', 'Станки', 'a0000000', 'b000001', 'c000000000', null), ('2', 'Запчасть (поле A)', 'Станки', 'a0000000', 'b000001', 'c000000000', 'd123000054'), -- Записи 3,4,5 должны быть сгруппированы только по полю option_b и -- проигнорированы(исключены) для группировки по остальным полям, несмотря на то, что также могут быть -- сгруппированы по полям option_c, option_d ('3', 'Запчасть (поле B)', 'Станки', 'a0000001', 'b000001', null, 'd123000054'), ('4', 'Запчасть (поле B)', 'Станки', 'a0000055', 'b000001', 'c005500000', 'd123000054'), ('5', 'Запчасть (поле B)', 'Станки', 'a0000277', 'b000001', 'c005500000', 'd123000054'), -- Записи 6,7,8 должны быть сгруппированы только по полю option_c и -- проигнорированы(исключены) для группировки по остальным полям, несмотря на то, что также могут быть -- сгруппированы по полю option_d ('6', 'Запчасть (поле C)', 'Станки', null, 'b000543', 'c005500000', 'd123000054'), ('7', 'Запчасть (поле C)', 'Станки', null, 'b000789', 'c005500000', 'd123000054'), ('8', 'Запчасть (поле C)', 'Станки', 'a0004787', 'b000055', 'c005500000', 'd123000054'), -- Записи 9,10 должны быть сгруппированы по полю option_d ('9', 'Запчасть (поле D)', 'Станки', 'a0063777', 'b000056', 'c001300000', 'd123000054'), ('10', 'Запчасть (поле D)', 'Станки', 'a0700787', 'b000058', 'c001400000', 'd123000054'), -- Записи 11,12 не попадают под группировку, т.к. все значения в полях option_* уникальны ('11', 'Запчасть без группы №1', 'Станки', 'a7463777', 'b005454', 'c651300000', 'd161271054'), ('12', 'Запчасть без группы №2', 'Станки', 'a9799987', 'b007676', 'c861400000', 'd981726374'); SELECT * FROM example_table;
id name category option_a option_b option_c option_d
1 Запчасть (поле A) Станки a0000000 b000001 c000000000
2 Запчасть (поле A) Станки a0000000 b000001 c000000000 d123000054
3 Запчасть (поле B) Станки a0000001 b000001 d123000054
4 Запчасть (поле B) Станки a0000055 b000001 c005500000 d123000054
5 Запчасть (поле B) Станки a0000277 b000001 c005500000 d123000054
6 Запчасть (поле C) Станки b000543 c005500000 d123000054
7 Запчасть (поле C) Станки b000789 c005500000 d123000054
8 Запчасть (поле C) Станки a0004787 b000055 c005500000 d123000054
9 Запчасть (поле D) Станки a0063777 b000056 c001300000 d123000054
10 Запчасть (поле D) Станки a0700787 b000058 c001400000 d123000054
11 Запчасть без группы №1 Станки a7463777 b005454 c651300000 d161271054
12 Запчасть без группы №2 Станки a9799987 b007676 c861400000 d981726374
 hidden batch(es)


SELECT GROUP_CONCAT(id) as id_list, GROUP_CONCAT(DISTINCT name) as name, min(category) as category, 'option_a' as group_type from example_table WHERE option_a IS NOT NULL GROUP by option_a,category HAVING COUNT(id) > 1 UNION SELECT GROUP_CONCAT(id) as id_list, GROUP_CONCAT(DISTINCT name) as name, min(category) as category, 'option_b' as group_type from example_table WHERE option_b IS NOT NULL GROUP by option_b,category HAVING COUNT(id) > 1 UNION SELECT GROUP_CONCAT(id) as id_list, GROUP_CONCAT(DISTINCT name) as name, min(category) as category, 'option_c' as group_type from example_table WHERE option_c IS NOT NULL GROUP by option_c,category HAVING COUNT(id) > 1 UNION SELECT GROUP_CONCAT(id) as id_list, GROUP_CONCAT(DISTINCT name) as name, min(category) as category, 'option_d' as group_type from example_table WHERE option_d IS NOT NULL GROUP by option_d,category;
id_list name category group_type
1,2 Запчасть (поле A) Станки option_a
1,2,3,4,5 Запчасть (поле A),Запчасть (поле B) Станки option_b
1,2 Запчасть (поле A) Станки option_c
4,5,6,7,8 Запчасть (поле B),Запчасть (поле C) Станки option_c
2,3,4,5,6,7,8,9,10 Запчасть (поле A),Запчасть (поле B),Запчасть (поле C),Запчасть (поле D) Станки option_d
11 Запчасть без группы №1 Станки option_d
12 Запчасть без группы №2 Станки option_d
 hidden batch(es)