Группировать данные по одному столбцу и создавать новый столбец на основе строк в каждой группе

#sql

#sql

Вопрос:

В моих данных есть столбцы «Задача» и «Время начала». Для каждой задачи может быть одно или несколько времен запуска. Что я хочу сделать, так это классифицировать каждую задачу как задачу «X», если все ее времена начала равны, и как задачу «Y», если все ее времена начала не равны.

Вот как должна выглядеть таблица :

https://imgur.com/a/RQPzPu9

Комментарии:

1. Какую базу данных вы используете?

Ответ №1:

Этого можно достичь, используя group by и подсчитывая отдельное время начала и используя регистр для возврата X или Y.

 Select task, 
    (case when count(distinct start_time) = 1 then 'X' else 'y' end) 
  from tasks 
  group by task;
  

или это, если вы хотите, чтобы это выглядело точно так же, как на картинке.

   Select tasks.task, tasks.start_time, new.new
  from tasks, (Select task, 
      (case when count(distinct start_time) = 1 then 'X' else 'y' end) as new
    from tasks 
    group by task) as new
  where tasks.task = new.task;
  

Вы можете просмотреть мое решение здесь https://paiza.io/projects/Zu7IBFc-5tFBK8xDuf3hPg?language=mysql P.S. Я просто использую Integer вместо date, потому что мне не хотелось иметь дело с датами, лол.

Ответ №2:

 Select task, 
    (case when count(distinct start_time) = 1 then 'X' else 'y' end) 
  from tasks 
  group by task;
  

Ответ №3:

С group by task помощью get значение new_column для каждой задачи, а затем присоединиться к таблице tasks :

 select t.id, t.task, g.new_column 
from tasks t inner join (
  select 
    task, 
    (case when count(distinct starttime) = 1 then 'X' else 'Y' end) new_column 
  from tasks 
  group by task
) g on g.task = t.task