【问题标题】:Select record with max value from each group with Query DSL使用 Query DSL 从每个组中选择具有最大值的记录
【发布时间】:2019-04-13 01:01:18
【问题描述】:

我有一个分数表,其中有球员的分数,我想为每个分数最高的球员选择唯一的记录。

这是表格:

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 无法解析这个类)。我正在使用 querydsl 4.x。提前谢谢你。

【问题讨论】:

    标签: sql jpa spring-data-jpa querydsl


    【解决方案1】:

    JPASubQuery 已在 querydsl 4 中删除。改为使用 JPAExpressions.select。您的 WHERE 子句应如下所示:

    .where(playerScore.score.eq(JPAExpressions.select(playerScore2.score.max())
                                .from(playerScore2))
                                .where(playerScore2.playerId.eq(playerScore.playerId)))
    

    【讨论】:

      猜你喜欢
      • 2022-11-07
      • 2016-01-04
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多