嵌套的MySQL GROUP BY命令

时间:2015-03-09 00:19:55

标签: mysql

我正在尝试使用GROUP_BY命令的层次结构创建MySQL查询。 我想在FRUIT& amp; COLOR专栏。

然后,我想创建一个新专栏" New?'查看水果的所有实例的DATE列(从而按FRUIT分组 - 无论颜色如何),并检查该水果的所有实例的Date = 3.6.15。如果这是真的,"是"被分配给该水果的所有行;否则,"否"被分配给该水果的所有行。

我的表目前看起来像这样:

FRUIT    COLOR    DATE    
Apple    Red      3.6.15
Apple    Green    3.6.15
Pear     Yellow   3.2.15
Melon    Red      3.6.15
Melon    Red      3.2.15
Grapes   Purple   3.6.15
Grapes   Green    3.4.15

以下是我想要创建的新视图:

FRUIT    COLOR    NEW?  
Apple    Red      Yes
Apple    Green    Yes
Pear     Yellow   No
Melon    Red      No
Grapes   Purple   No
Grapes   Green    No

如何帮助我实现这一目标将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以在case语句中使用聚合:

select fruit, color,
       (case when exists (select 1 from table t2 where t2.color = t.color and date <> '2015-03-06')
             then 'no'
             else 'yes'
        end) as IsNew
from table t;

这只是检查不是当前日期的日期。应存在记录,因为子查询位于同一个表中。

答案 1 :(得分:0)

您可以使用自联接来执行此操作。连接表将为具有多个日期的所有水果返回非空值,case表达式使用它来确定水果是否是新的:

select 
    t1.FRUIT, 
    t1.COLOR,
    case when t1.date = '3.6.15' and t2.DATE is null 
      then 'Yes' 
      else 'No' 
    end as "New?"
from fruits t1
left join fruits t2 on t1.FRUIT = t2.FRUIT and t1.DATE <> t2.DATE;

Sample SQL Fiddle