2013-03-21 97 views
0

作为我的第一个post的后续操作,我要求将数据操作到Excel数据透视表中,我推测这只能通过使用联合的数据库命令完成。因此,我使用相同的数据提交了一个新问题,但是从MySQL的角度来看。MySQL - 按列分组数据

我都有以下表格:

mysql> select * from ilike; 
+-----------+------------+----------+ 
| likebread | likecheese | likemilk | 
+-----------+------------+----------+ 
| girl  | boy  | girl  | 
| boy  | girl  | boy  | 
| boy  | boy  | boy  | 
| boy  | boy  | girl  | 
| boy  | boy  | boy  | 
| boy  | girl  | boy  | 
| girl  | boy  | girl  | 
| boy  | girl  | girl  | 
| boy  | boy  | girl  | 
| girl  | boy  | boy  | 
+-----------+------------+----------+ 
10 rows in set (0.00 sec) 

我想计数和群的各列中的数据,从而使最终的结果是,显示了男孩和女孩的每个相应的计数的表列如:

 +-----------+------------+----------+ 
     | likebread | likecheese | likemilk | 
+-------+-------+------------+--------------+ 
| boys | 7   | 7   | 5  | 
| girls | 3   | 3   | 5  | 
+-------+-----------+------------+----------+ 

任何帮助赞赏!

+2

你能正常化这个表? – Kermit 2013-03-21 18:32:50

回答

1

这里有一种方法:

select g.gender, 
     sum(case when likebread=g.gender then 1 end) likebread, 
     sum(case when likecheese=g.gender then 1 end) likecheese, 
     sum(case when likemilk=g.gender then 1 end) likemilk 
from (select 'girl' gender union select 'boy') g 
cross join ilike 
group by g.gender 

结果

| GENDER | LIKEBREAD | LIKECHEESE | LIKEMILK | 
---------------------------------------------- 
| boy |   7 |   7 |  5 | 
| girl |   3 |   3 |  5 |

See the demo

+1

+1尼斯解决方案;它可能应该正常化。 – Kermit 2013-03-21 18:40:05

+0

@Mark - 感谢您的回复。当我尝试运行此查询时,出现此错误: 错误1267(HY000):非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)进行操作'=' 想法?我在Mac OS X上运行这个版本 - MySQL版本:5.5.9 – Jaren 2013-03-21 18:56:29

+0

后续 - 我能够解决排序问题 - 我的数据库和表设置为latin1_swedish_ci。感谢您的帮助! – Jaren 2013-03-21 19:10:52