基本SQL。有没有更好的方法来使用聚合函数?

时间:2013-11-01 17:12:03

标签: mysql sql

我有一个表'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行和那些行。

2 个答案:

答案 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以获取完整的解决方案。