按年计算前三名

时间:2017-11-08 22:52:48

标签: sql

我有以下查询

context = d3.select("#context").transition();
context.select(".line2")

正在制作

select year, name, count(*) as c from product 
group by year, name order by year, c desc limit 10

年专栏有2007年至2017年。

如何找到每年前3名+----+------------+------+ |year|name |c | +----+------------+------+ |2007| A| 913| |2007| J| 814| |2007| M| 565| |2007| C| 453| |2007| S| 414|

我一直在尝试使用rank和dense_rank,但没有运气。

我觉得我很近,但就在那里。

数据库并不重要,我在这里寻找概念而不是db特定。我可以根据需要翻译它。

提前致谢

1 个答案:

答案 0 :(得分:1)

MySQL中最简单的方法是有点黑客攻击。假设名称没有逗号:

select year, substring_index(group_concat(name order by cnt desc), ',', 3) as names
from (select year, name, count(*) as cnt
      from product 
      group by year, name
     ) t
group by year
order by year;

注意:这也有基于group_concat()中间值的默认大小的内部限制。它应该在合理的数据集上运行良好(每年有数十个但不是数千个名称)。

通过“first_letter”,我认为您的意思是nameleft(name, 1)