回答

收藏

使用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)))
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则