2015-06-19 163 views
0

我有以下的mysql表cars布局MySQL的数据透视表

BRAND | TYPE | COLOR 
----------------------- 
bmw  | e30 | red 
bmw  | e90 | blue 
bmw  | e12 | red 
audi | a3 | green 
bmw  | e90 | red 
audi | tt | blue 
bmw  | e12 | blue 
audi | a3 | green 

,并希望有一个数据透视表与布局如下结果:

brand_type | red | blue | green | total 
------------------------------------------- 
bmw-e30  | 1  | 0  | 0  | 1 
bmw-e90  | 1  | 1  | 0  | 2 
bmw-e12  | 1  | 1  | 0  | 2 
audi-a3  | 0  | 0  | 2  | 2 
audi-tt  | 0  | 1  | 1  | 2 

我可以achive的farest是这个查询:

SELECT brand, 
    sum(if(color = 'red', 1, 0)) as red, 
    sum(if(color = 'blue', 1, 0)) as blue, 
    sum(if(color = 'green', 1,0)) as green, 
    count(color) as total 
FROM `cars` group by brand; 

有了这样的结果:

brand | red | blue | green | total 
------------------------------------------- 
bmw  | 3  | 2  | 0  | 5 
audi | 0  | 1  | 3  | 4 

我在网上搜索了,但我找不到其中2列(品牌和类型)concated 在枢轴结果

1.使用任何解决方案如何,我可以达到我想要的数据透视表结果?解决了@kevinsjöberg

SELECT concat(brand, '-', type) as BT, 
    sum(if(color = 'red', 1, 0)) as red, 
    sum(if(color = 'blue', 1, 0)) as blue, 
    sum(if(color = 'green', 1,0)) as green, 
    count(color) as total 
FROM `cars` group by BT; 

的提示[删除第二个问题,因为它是与第一个答案已经解决]

+1

为什么要品牌/类型tp是单列? – Strawberry

+0

是一项要求。 – jerik

+0

我只是不明白你为什么要这样做。数据显示的一般问题在应用程序级别上更简单有效地处理。 – Strawberry

回答

2

使用从MySQL CONCAT功能。

CONCAT(`BRAND`, '-', `TYPE`) 

然后GROUP BY brandtype

请参阅http://sqlfiddle.com/#!9/6d3db/2

+0

只是concatnation很容易:)但我需要得到这些concanated列的颜色计数......我如何实现这一目标? – jerik

+0

你的例子莫名其妙地不显示所有可能的组合,表中存在的一些组合没有被显示,并且没有被计数。由于某种原因.... – jerik

+0

我已更新我的示例。 –