[英]Select record with max value from each group with Query DSL
我有一个得分表,其中有球员得分,我想为每个得分最高的球员选择唯一的记录。
表格如下:
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
子句应如下所示:
.where(playerScore.score.eq(JPAExpressions.select(playerScore2.score.max())
.from(playerScore2))
.where(playerScore2.playerId.eq(playerScore.playerId)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.