如何在计数中查询计数(不使用子查询)?

How to query for a count within a count (without using a sub query)?

如果你研究这个 table 片刻,你会发现 Dave 是独一无二的,因为他赢了 multiple awards in a single year 而且他做到了 for multiple years.

人奖年份
------------------------------
戴夫红 2015
戴夫蓝 2015
戴夫红 2013
戴夫·格林 2013
苏珊蓝 2015
苏珊·格林 2011
苏珊红2011
苏珊红 2010
汤姆红2012
汤姆蓝 2012
汤姆格林 2012
汤姆黄 2012
汤姆紫2012

有没有一种方法可以不使用子查询来查询 Dave(超过 1 年的多次获奖者)?
例如,您可以说GROUP BY person HAVING COUNT(DISTINCT year) > 1 AND COUNT(*) > 3 但这也会产生 Susan。

我想你可以使用这个:

select a1.person
  from awards a1
  join awards a2
    on a1.person = a2.person
   and a1.year = a2.year
   and a1.award <> a2.award
 group by a1.person
having count(distinct a1.year) > 1

Fiddle: http://sqlfiddle.com/#!2/b98bf/8/0

但是你最好使用子查询:

select person
  from (select person, year, count(*) as num_in_yr
          from awards
         group by person, year) x
 group by person
having sum(num_in_yr >= 2) >= 2

Fiddle: http://sqlfiddle.com/#!2/b98bf/7/0