#mysql
#mysql
Вопрос:
У меня есть таблица в mysql, которая выглядит следующим образом.
Employee | Result
-----------------------
Employee 1 | yes
Employee 2 | no
Employee 3 | diveded
Employee 4 | no answer
Employee 4 | yes
Employee 1 | no
Employee 2 | no answer
Как я могу использовать один запрос, чтобы получить следующий результат.
Employee | Yes | No | Divided | No answer
------------------------------------------------------
Employee 1 | 1 | 1 | 0 | 0
Employee 2 | 0 | 1 | 0 | 1
Employee 3 | 0 | 0 | 1 | 0
Employee 4 | 1 | 0 | 0 | 1
Я попробовал distinct с комбинацией group by, но почему-то я не могу придать ей такую форму. Я даже не уверен, возможно ли это с помощью одного запроса.
Я попробовал следующий код.
select Employee,
Count(Result= 'Yes') as Yes,
Count(Result= 'No') as No,
Count(Result= 'Divided') as Divided,
Count(Result= 'No answer') As Noanswer
from My.Table
group by Employee
Решение:
неверно использовать значение max, и count также не работает. Казалось, что Sum — это вариант, который правильно подсчитывает результаты. Я не уверен, почему count не работает, а sum работает.
select employee,
sum(Result = 'yes') as 'yes',
sum(Result = 'no') as 'no',
sum(Result = 'diveded') as 'divided',
sum(Result = 'no answer') as 'no answer'
from your_table
group by employee
Ответ №1:
select employee,
max(result = 'yes') as yes,
max(result = 'no') as no,
max(result = 'diveded') as divided,
max(result = 'no answer') as noanswer
from your_table
group by employee
Демонстрация SQLFiddle
Комментарии:
1. Я попробовал это решение, скорректировал его, но я получаю одинаковый результат для каждого сотрудника. Он просто показал 1 для каждого результата. Итак, я переключил Max на count, и это выглядело лучше, но все же я получил тот же результат для ответа «да» / «нет» / «нет».
2. Никогда не слышал об этом раньше, хороший веб-сайт для игры!
3. Спасибо @Strawberry, форматирование было плохим.
Ответ №2:
Казалось, что Sum — это вариант, который правильно подсчитывает результаты. Я не уверен, почему count не работает, а sum работает.
select employee,
sum(Result = 'yes') as 'yes',
sum(Result = 'no') as 'no',
sum(Result = 'diveded') as 'divided',
sum(Result = 'no answer') as 'no answer'
from your_table
group by employee