У меня есть следующая 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;
[удален второй вопрос, как она решается с первым ответом уже]
Почему вы хотите бренд/тип Т.П. один столбец? – Strawberry
является обязательным требованием. – jerik
Я просто не понимаю, почему вы хотите это сделать. В общем случае проблемы с отображением данных гораздо проще и эффективнее обрабатываются на уровне приложений. – Strawberry