Как вы считаете несколько элементов из одного столбца с разными значениями в mysql

#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