2015-06-19 2 views
0

У меня есть следующая MySQL-таблицей cars компоновкиMySQL сводной таблица с Concat и шарнирного подсчетом выбранных строк

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 

Farest я мог achive был этот запрос:

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

Почему вы хотите бренд/тип Т.П. один столбец? – Strawberry

+0

является обязательным требованием. – jerik

+0

Я просто не понимаю, почему вы хотите это сделать. В общем случае проблемы с отображением данных гораздо проще и эффективнее обрабатываются на уровне приложений. – Strawberry

ответ

2

Используйте CONCAT функция из MySQL.

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

Вы затем GROUP BY brand и type.

См http://sqlfiddle.com/#!9/6d3db/2

+0

Просто конкатенация проста :) Но мне нужно получить цвета, подсчитанные для этих контактированных столбцов ... как я могу добиться этого? – jerik

+0

Ваш пример каким-то образом не показывает все возможные комбинации, некоторые из которых существуют в таблице, не отображаются и не учитываются. По какой-то причине .... – jerik

+0

Я обновил свой пример. –

Смежные вопросы