QueryDSL выбирает количество () / count() как ~?

#querydsl

#querydsl

Вопрос:

выберите

       (select count(*) from table2 where table2.table2Seq = table1.table1Seq) as count1,

      (select count(*) from table2 where table2.table2Seq = table1.table1Seq and table2Yn = true) as count2,

      (select count(*) from table2 where table2.table2Seq = table1.table1Seq) / (select count(*) from table2 where table2.table2Seq = table1.table1Seq and table2Yn = true) as count3
  

От

       table1
  

упорядочить по

      count3
  

** Я хочу этот запрос. Как вы превращаете это в QueryDSL? Я хочу отсортировать счетчик из подзапроса, разделенный на счетчик из подзапроса. **

 NumberPath<Long> count1 = Expressions.numberPath(Long.class, “count1”);
NumberPath<Long> count2 = Expressions.numberPath(Long.class, “count2”);
NumberPath<Long> count3 = Expressions.numberPath(Long.class, “count3”);

JPQLQuery<OnlineTrainingCourseDto> query = getQuerydsl().createQuery()
    .select(
        new Dto(
            ExpressionUtils.as(
                JPAExpressions.select(table2.table2Seq.count())
                        .from(table2)
                        .where(table2.table2Seq.eq(table1.table1Seq)),
                count1
            ),
            ExpressionUtils.as(
                JPAExpressions.select(table2.table2Seq.count())
                        .from(table2)
                        .where(table2.table2Seq.eq(table1.table1Seq)
                        .and(table2.table2Yn.eq(true))),
                count2
            ),
            
            ***????? count1 / count2 as count3 ?????***

            )
        )
    )
    .from(table1)
  

Ответ №1:

Вы можете преобразовать выражение в числовое выражение, чтобы получить доступ к оператору divide:

 JPAExpressions.asNumber(
     JPAExpressions.select(table2.table2Seq.count())
                        .from(table2)
                        .where(table2.table2Seq.eq(table1.table1Seq)))
.divide(
    JPAExpressions.asNumber(JPAExpressions.select(table2.table2Seq.count())
                        .from(table2)
                        .where(table2.table2Seq.eq(table1.table1Seq)
                        .and(table2.table2Yn.eq(true))))
).as("count3")
  

Комментарии:

1. Большое вам спасибо. JPAExpressions.как номер… Я об этом не подумал.