【问题标题】:Grouped Query with different field values具有不同字段值的分组查询
【发布时间】:2015-07-27 07:59:01
【问题描述】:

我使用以下查询将逐年工资分组到一个合同记录中。

SELECT playerid,contractid,term,min(season) as yearone,exp_year,notes
FROM salaries
GROUP BY playerid, contractid
HAVING yearone <= 2014 AND exp_year > 2014

如您所见,我将所有记录分组在 playerid 和 contractid 上。分组结果中的所有字段都具有相同的数据,但“notes”除外,它可以包含注释或为 NULL。

我想要实现的是以下两个选项之一:

  1. 如果组合在一起的任何记录都包含注释,则表明并非所有记录都为 NULL(可以像 1=note / 0=null 一样简单)

  1. 如果组中的任何记录都包含注释,请不要将其包含在查询中(即 - 仅查询所有记录的注释 = NULL 的合同)

我不确定这是否可行,但希望得到一些意见/指导。

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    要检查任何记录是否包含注释,您可以编写case,根据是否有注释返回 1 或 0。如果至少有一个音符,则最大化此值将返回。你也可以把它加起来得到音符的数量。

    SELECT 
      playerid,
      contractid,
      term,
      min(season) as yearone,
      exp_year,
      notes,
      max(case when notes is not null then 1 else 0 end) as HASNOTES,
      sum(case when notes is not null then 1 else 0 end) as NUMBEROFNOTES
    FROM salaries
    GROUP BY playerid, contractid
    HAVING yearone <= 2014 AND exp_year > 2014
    

    显然你可以将该值移动到HAVING 子句,导致查询不返回那些有注释的记录:

    HAVING
      max(case when notes is not null then 1 else 0 end) = 0
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多