我有以下的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;
的提示[删除第二个问题,因为它是与第一个答案已经解决]
为什么要品牌/类型tp是单列? – Strawberry
是一项要求。 – jerik
我只是不明白你为什么要这样做。数据显示的一般问题在应用程序级别上更简单有效地处理。 – Strawberry