我有一个得分表,其中有球员得分,并且我想为每个得分最高的球员选择唯一的记录。
表格如下:
id | player_id | score | ... 1 | 1 | 10 | ... 2 | 2 | 21 | ... 3 | 3 | 9 | ... 4 | 1 | 30 | ... 5 | 3 | 2 | ...
预期结果:
id | player_id | score | ... 2 | 2 | 21 | ... 3 | 3 | 9 | ... 4 | 1 | 30 | ...
我可以这样用纯SQL来实现:
SELECT * FROM player_score ps WHERE ps.score = ( SELECT max(ps2.score) FROM player_score ps2 WHERE ps2.player_id = ps.player_id )
您能告诉我如何使用查询dsl实现相同的查询吗?我找到了一些使用JPASubQuery的解决方案,但该类对我不起作用(我的IDE无法解析该类)。我正在使用querydsl4.x。先感谢您。
JPASubQuery已在querydsl 4中删除。请改为使用JPAExpressions.select。您的WHERE子句应如下所示:
JPASubQuery
JPAExpressions.select
WHERE
.where(playerScore.score.eq(JPAExpressions.select(playerScore2.score.max()) .from(playerScore2)) .where(playerScore2.playerId.eq(playerScore.playerId)))