Jpa 用于计算平均值的命名查询

Jpa 用于计算平均值的命名查询,jpa,jpql,Jpa,Jpql,我正在寻找一些帮助,因为我有点困惑 我已经创建了一个实体来存储用户的标记 基本上我想创建一个命名查询来使用,一个自动计算平均值的查询,唯一的问题是我只想对选定的列进行平均 目前该表为: @Entity(name = "MARKING") public class Marking implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(st

我正在寻找一些帮助,因为我有点困惑

我已经创建了一个实体来存储用户的标记

基本上我想创建一个命名查询来使用,一个自动计算平均值的查询,唯一的问题是我只想对选定的列进行平均

目前该表为:

@Entity(name = "MARKING")
public class Marking implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    private Person marker;

    @ManyToOne
    private Project project;


    private String markingCompleted, markSectionOne, markSectionTwo, markSectionThree, markSectionFour,
            markSectionFive, markSectionSix, markSectionSeven, markSectionEight,
            markSectionNine, markSectionTen, markSectionEleven, markSectionTwelve, markSectionThirteen, markAdjust, overalMark, thirdMarker, plagorism;
我要问的是,我应该如何构造只会计算出标记第1-13节平均值的查询

谢谢各位

编辑

我已经在我的门面上添加了这个,但它似乎不正确,是吗

public TypedQuery<Double> markingAvg(Project id) {
    System.out.println("id = " + id);
    TypedQuery<Double> query = em.createQuery("select ((m.markSectionOne + m.markSectionTwo + m.markSectionThree + "
            + "m.markSectionFour + m.markSectionFive + m.markSectionSix + m.markSectionSeven +"
            + "m.markSectionEight + m.markSectionNine + m.markSectionTen + m.markSectionEleven +"
            + "m.markSectionTwelve + m.markSectionThirteen) / 13.0) from Marking m where m.project = :id", Double.class);
    query.setParameter("id", id);
    double avg = query.getSingleResult();
    return null;
}
public-TypedQuery-markingAvg(项目id){
System.out.println(“id=”+id);
TypedQuery query=em.createQuery(“选择((m.markSectionOne+m.markSectionTwo+m.markSectionThree+)”
+“m.MarkSection4+m.MarkSection5+m.MarkSection6+m.MarkSection7+”
+“m.MarkSection8+m.MarkSection9+m.MarkSection10+m.MarkSection11+”
+“m.marksection12+m.marksection13)/13.0),其中m.project=:id”,Double.class);
query.setParameter(“id”,id);
double avg=query.getSingleResult();
返回null;
}

第一种方法是计算数据库端的平均值,然后检索结果:

TypedQuery<Double> query = em.createQuery("select ((m.markSectionOne + ... + m.markSectionThirteen) / 13.0) from Marking m where m.id = :id", Double.class);
query.setParameter....
double avg = query.getSingleResult();
TypedQuery query=em.createQuery(“从标记m中选择((m.markSectionOne+…+m.marksection13)/13.0),其中m.id=:id”,Double.class);
query.setParameter。。。。
double avg=query.getSingleResult();
另一种方法是选择实体,然后用java计算平均值:

TypedQuery<Marking> query = em.createQuery("select m from Marking m where m.id = :id", Marking.class);
query.setParameter....
Marking m = query.getSingleResult();
int sum = m.getMarkSectionOne() + ... + m.getMarkSectionThirteen();
double avg = sum / 13.0;
TypedQuery query=em.createQuery(“从标记m中选择m,其中m.id=:id”,Marking.class);
query.setParameter。。。。
标记m=query.getSingleResult();
int sum=m.getMarkSectionOne()+…+m、 getmarksection13();
双平均值=总和/13.0;

你能检查一下我对我的问题所做的编辑吗?看起来你想按项目分组。