如何在计数中查询计数(不使用子查询)?
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
如果你研究这个 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