Hibernate JPQL ORDER BY from计算字段/表达式

Hibernate JPQL ORDER BY from计算字段/表达式,hibernate,jpa,sql-order-by,expression,jpql,Hibernate,Jpa,Sql Order By,Expression,Jpql,这基本上是一个后续问题 以下是JPQL查询: SELECT NEW com.domain.project.view.StandingsStatLine( ro.id , cl.name , te.ordinalNbr + 1 , pa.wasWithdrawn , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT

这基本上是一个后续问题

以下是JPQL查询:

  SELECT NEW com.domain.project.view.StandingsStatLine(
      ro.id
    , cl.name
    , te.ordinalNbr + 1
    , pa.wasWithdrawn
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore IS NOT NULL THEN 1 ELSE 0 END)       // g = games
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore > sca.finalScore THEN 1 ELSE 0 END)  // w = wins
    , SUM(CASE WHEN paf.wasWithdrawn = FALSE AND paa.wasWithdrawn = FALSE AND scf.finalScore < sca.finalScore THEN 1 ELSE 0 END)  // l = losses
    , ...
    , <very complex multi-line expression> // nrp = normalized ranking points
    )
  FROM Club cl
    JOIN cl.teams te
    JOIN te.rosters ro
    JOIN ro.season se
    JOIN ro.participations pa
    JOIN pa.group gr
    JOIN gr.round rd
    JOIN rd.subCompetition sc
    JOIN sc.competition cn
    JOIN gr.games ga
    JOIN ga.scores scf
    JOIN ga.scores sca
    JOIN scf.roster rof
    JOIN sca.roster roa
    JOIN rof.participations paf
    JOIN roa.participations paa
  WHERE ...
  GROUP BY ...
  ORDER BY pa.wasWithdrawn, nrp DESC, w DESC, g DESC, cl.shorthand
选择新建com.domain.project.view.standingstatline(
副检察官
,cl.name
,te.ordinalNbr+1
,宾夕法尼亚州
,SUM(当paf.wasdracted=FALSE和paa.wasdracted=FALSE且scf.finalScore不为NULL时,则为1,否则为0结束)//g=games
,SUM(当paf.wasdracted=FALSE,paa.wasdracted=FALSE,scf.finalScore>sca.finalScore,然后为1,否则为0结束时的情况)//w=wins
,SUM(当paf.wasdracted=FALSE,paa.wasdracted=FALSE,scf.finalScore
这与上一个问题中的陈述相同,没有
。。。作为…
表达式

对于感兴趣的人:

  • nrp是“标准化排名点”。这是根据所玩游戏可获得的最大点数的简单百分比。背景是,一支打了10场比赛的球队比一支只打了6场比赛的球队总得分要高得多(每输一场就得1分)。这是实际排名指标。代码中解释了w和g
  • scf和sca是支持和反对的分数(在
    中过滤,其中
  • Q:

    您如何在JPQL中按计算属性排序?我经常这样做,但是自从
    。。。由于SELECT中的…
    似乎是无效的JPQL(Hibernate可以处理它们),您通常如何解决这个问题?

    找到了它。另见。请注意,这里是倒数第二个示例

    select_item ::= select_expression [[AS] result_variable]
    
    在选择中允许作为选项

    SELECT AVG(e.salary) AS s,
        e.address.city
    FROM Employee e
    GROUP BY e.address.city
    ORDER BY s
    
    我不知道构造器表达式是否也支持这一点,但我认为没有理由不这样做