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