在GROUP BY中使用LIMIT来获得每组N个结果?以下查询:SELECTyear, id, rateFROM hWHERE year BETWEEN 2000 AND 2009AND id IN (SELECT rid FROM table2)GROUP BY id, yearORDER BY id, rate DESC收益率:year id rate2006 p01 82003 p01 7.42008 p01 6.82001 p01 5.92007 p01 5.32009 p01 4.42002 p01 3.92004 p01 3.52005 p01 2.12000 p01 0.82001 p02 12.52004 p02 12.42002 p02 12.22003 p02 10.32000 p02 8.72006 p02 4.62007 p02 3.3我想要的只是每个id的前5个结果:2006 p01 82003 p01 7.42008 p01 6.82001 p01 5.92007 p01 5.32001 p02 12.52004 p02 12.42002 p02 12.22003 p02 10.32000 p02 8.7有没有办法使用在GROUP BY中工作的某种LIMIT修饰符来做到这一点?
4 回答

慕桂英4014372
TA贡献1871条经验 获得超13个赞
对我来说就像
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;
添加回答
举报
0/150
提交
取消