在GROUP BY中使用LIMIT来获得每组N个结果?

在GROUP BY中使用LIMIT来获得每组N个结果?

以下查询:


SELECT

year, id, rate

FROM h

WHERE year BETWEEN 2000 AND 2009

AND id IN (SELECT rid FROM table2)

GROUP BY id, year

ORDER BY id, rate DESC

收益率:


year    id  rate

2006    p01 8

2003    p01 7.4

2008    p01 6.8

2001    p01 5.9

2007    p01 5.3

2009    p01 4.4

2002    p01 3.9

2004    p01 3.5

2005    p01 2.1

2000    p01 0.8

2001    p02 12.5

2004    p02 12.4

2002    p02 12.2

2003    p02 10.3

2000    p02 8.7

2006    p02 4.6

2007    p02 3.3

我想要的只是每个id的前5个结果:


2006    p01 8

2003    p01 7.4

2008    p01 6.8

2001    p01 5.9

2007    p01 5.3

2001    p02 12.5

2004    p02 12.4

2002    p02 12.2

2003    p02 10.3

2000    p02 8.7

有没有办法使用在GROUP BY中工作的某种LIMIT修饰符来做到这一点?


12345678_0001
浏览 7705回答 4
4回答

慕桂英4014372

对我来说就像SUBSTRING_INDEX(group_concat(col_name order by desired_col_order_name), ',', N)工作得很好。没有复杂的查询。例如:每组获得前1名SELECT      *FROM     yourtableWHERE     id IN (SELECT              SUBSTRING_INDEX(GROUP_CONCAT(id                            ORDER BY rate DESC),                         ',',                         1) id        FROM             yourtable        GROUP BY year)ORDER BY rate DESC;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL