我有一个表'Country'(带有SQLWorkbench的演示版),带有属性:'name'和'IndepYear'。
我想找到更多国家变得独立的一年,我对他们的名字不感兴趣。
此查询有效。
SELECT Nest.IndepYear, Nest.conta
FROM (Select IndepYear,count(IndepYear) AS conta
FROM country GROUP BY IndepYear) Nest
WHERE Nest.conta = (Select max(conta) FROM (SELECT IndepYear,count(IndepYear) AS conta
FROM country GROUP BY IndepYear)Nest2)
输出
IndepYear Conta
1960 18
1991 18
是否有更聪明,更易读或更有效的方法来做到这一点?
编辑:感谢您的答案到目前为止,但我有兴趣获得仅顶级结果。我的意思是获得所有前n行和那些行。
答案 0 :(得分:0)
这远非完美,但可能会为您提供有关如何改进查询的一些想法:
select IndepYear, count(*)
from country
group by IndepYear
having count(*) = (
select count(*) from country group by IndepYear order by count(*) desc limit 1
)
答案 1 :(得分:0)
如果我理解你的问题,下面的SQL应该可以解决问题:
SELECT IndepYear, count(IndepYear) conta
FROM Countries
GROUP BY IndepYear
ORDER By count(IndepYear) DESC
请参阅SQL Fiddle以获取完整的解决方案。