2013-03-21 5 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

ответ

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

+0

@Mark - Спасибо за сообщение. Когда я пытаюсь запустить этот запрос, я получаю эту ошибку: ОШИБКА 1267 (HY000): Недопустимое сочетание сортировок (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) для операции '=' Мысли? Я запускаю это в Mac OS X - версия MySQL: 5.5.9 – Jaren

+0

Последующие действия - мне удалось решить проблему сопоставления - у меня была база данных и таблица для latin1_swedish_ci. Спасибо за помощь! – Jaren

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