#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.как номер… Я об этом не подумал.