举例:
SELECT a.username,b.timestr,b.kills
FROM user1 a JOIN userkills b
ON a.id = b.userid
WHERE username='孙悟空'
ORDER BY b.kills DESC
LIMIT 2
查询结果:每个人打怪最多的两天 ,倒序(DESC)
我们可以对每个人分别执行上面的查询
试想,如果分类很多呢,上面的查询则不符合要求,则
优化1:
WITH tmp AS(
SELECT a.username ,b.timestr,b,kills,
ROW_NUMBER() over
(partition by a.username
order by b.kills) cnt
FROM user1 a JOIN userkills b
ON a.id = b.userid
)
SELECT * FROM tmp WHERE cnt <=2
)
MySQL中不支持ROW_NUMBER() 语句
优化2:
SELECT d.username,c.timestr,kills
FROM(
SELECT userid,timestr,kills,
(SELECT COUNT(*) FROM userkills b
WHERE b.userid = a.userid AND a.kills <= b.kills) AS cnt
FROM userkills a
GROUP BY userid,timestr,kills
) c JOIN user1 d ON c.userid = d.id
WHERE cnt <= 2
)