使用Query DSL从每个组中选择具有最大值的记录
技术问答
262 人阅读
|
0 人回复
|
2023-09-12
|
我有一个得分表,包括球员得分,我想为每个得分最高的球员选择唯一的记录。" E2 m5 n$ }' J. \& f
表格如下:
; _: `# e% n& z; i+ @id | player_id | score | ...1 | | 10 | ...2 | 2 | 21 | ...3 | 3 | 9 | ...4 | | 30 | ...5 | 3 | 2 | ...预期结果:
, C. g4 y( ]9 t! T2 s/ Q0 j" bid | player_id | score | ...2 | 2 | 21 | ...3 | 3 | 9 | ...4 | | 30 | ...我可以这样用纯SQL来实现:
/ M" C. M/ D# E% `2 tSELECT *FROM player_score psWHERE ps.score = SELECT max(ps2.score) FROM player_score ps2 WHERE ps2.player_id = ps.player_id)你可以告诉我如何使用查询dsl实现同样的查询吗?我找到了一些用途JPASubQuery但是这种解决方案对我不起作用(我的IDE不能分析这类)。我在用。querydsl4.x。先感谢您。
. {: M+ C/ W! k* R
$ k* |/ Q" `! F- l1 T 解决方案: ) g5 X' a: @" ]
JPASubQuery已在querydsl 4删除。请改为使用。JPAExpressions.select。您的WHERE子句如下:8 d0 p9 S1 Z X G
.where(playerScore.score.eq(JPAExpressions.select(playerScore2.score.max())) .from(playerScore2))) .where(playerScore2.playerId.eq(playerScore.playerId))) |
|
|
|
|
|