2

如果你研究一下这张表,你会发现戴夫是独一无二的,因为他赢了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。

4

1 回答 1

3

我认为你可以使用这个:

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

小提琴: 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

小提琴: http ://sqlfiddle.com/#!2/b98bf/7/0

于 2015-01-08T04:22:56.230 回答