聚合中的最大值 (sql)

max value in aggregation (sql)

我有一些这样的数据:

diffdat contract    rank
 22         a765      1
  9         b114      1
 33         b114      2
 78          c72      1

我正在尝试按合同汇总计数:

  1. 最大等级 = 1 且 diffdat < 30

我应该得到 1 个案例:

diffdat contract    rank
 22         a765      1

和 2. 最大等级 = 1 和 diffdat > 30

diffdat contract    rank
78          c72      1

我一直天真地尝试使用类似

的东西
select count(*) from (
select contract from dat group by contract having max(rank) = 1 and diffdat < 30 ) g

但这似乎不起作用,因为数据未汇总,并且某些情况 (b114) 包含在两个计数中(> 和 < 30)

我该如何解决这个问题? 感谢您的帮助

尝试使用 case when

   select contract, sum(case when rank = 1 and diffdat < 30 then 1 else 0 end),
           sum( case when rank = 1 and diffdat > 30 then 1 else 0 end)
      from dat group by contract