需要从查询中获取mysql的信息

问题描述 投票:-1回答:2

我有这样一张桌子:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `x` varchar(45) DEFAULT NULL,
  `y` varchar(45) DEFAULT NULL,
  `z` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;

有了这些数据:

INSERT INTO test(id, x, y, z) VALUES (1, '1', 'A', 'A');
INSERT INTO test(id, x, y, z) VALUES (2, '1', 'B', 'B');
INSERT INTO test(id, x, y, z) VALUES (3, '1', 'A', 'B');
INSERT INTO test(id, x, y, z) VALUES (4, '2', 'A', 'A');
INSERT INTO test(id, x, y, z) VALUES (5, '2', 'A', 'A');
INSERT INTO test(id, x, y, z) VALUES (6, '2', 'A', 'A');
INSERT INTO test(id, x, y, z) VALUES (7, '3', 'B', 'A');
INSERT INTO test(id, x, y, z) VALUES (8, '4', 'B', 'B');
INSERT INTO test(id, x, y, z) VALUES (9, '5', 'C', 'C');
INSERT INTO test(id, x, y, z) VALUES (10, '5', 'C', 'C');
INSERT INTO test(id, x, y, z) VALUES (11, '5', 'A', 'B');

我正在寻找什么必须是查询才能得到这个结果:

x y/z count    
1 y A 2
1 y B 1
1 z A 1
1 z B 2    
2 y A 3
2 z A 3   
3 y B 1 
3 z A 1   
4 y B 1
4 z B 1    
5 y C 2
5 y A 1
5 z C 2
5 z B 1

我尝试了很多组合与group by,但我无法获得理想的结果。

mysql sql
2个回答
1
投票

我想你想要一个union allgroup by

select x, which, val, count(*) as cnt
from ((select x, 'y' as which, y as val from test) union all
      (select x, 'z' as which, z as val from test) 
     ) xyz
group by x, which, val;    

Here是一个SQL小提琴。


0
投票

在这里尝试一下。它将为您创建一个表,其中包含两个字段,每个x值都有一行。第一个字段是x值,第二个字段是逗号分隔的y / z组合字符串及其计数。那对你有用吗?

select x, y+','+z combo, count(*) cnt into #A from     
   test  
   group by x , y+','+z    

   select x, combo+','+cast(a.cnt as varchar) data into #B  from #A a 

   Select distinct t2.x, 
               substring((Select ', '+t1.data 
                From #b t1
                Where T1.x= T2.x
                ORDER BY T1.x
                For XML PATH ('')),2, 1000) data
         From #b T2
© www.soinside.com 2019 - 2024. All rights reserved.