按一列对数据进行分组,然后根据每组中的行创建一个新列

时间:2019-04-09 15:56:13

标签: sql

我的数据中有“任务”和“开始时间”列。对于每个任务,可能会有一个或多个开始时间。我想做的是,如果每个任务的开始时间都相等,则将其分类为“ X”任务,如果所有任务的开始时间均不相同,则将其分类为“ Y”任务。

这是表格的外观:

https://imgur.com/a/RQPzPu9

3 个答案:

答案 0 :(得分:2)

这可以通过使用一组并计算不同的开始时间,并使用大小写返回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;

您可以查看我的解决方案here https://paiza.io/projects/Zu7IBFc-5tFBK8xDuf3hPg?language=mysql P.S.我只是使用Integer而不是date,因为我不想处理日期。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

使用group by task获取每个任务的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