Jooq: Выберите группу подсчета по - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь подсчитать различные возможности поля gp_status в моей таблице. У меня есть запрос sql, который работает, просто не могу понять, как его транскрибировать в Jooq.

select i.gp_status, COUNT(i.gp_status) 
from ideas_service.idea i 
group by i.gp_status 

Пока в JOOQ у меня есть это

var result = dsl.select(IDEA.GP_STATUS,count(),count(IDEA.GP_STATUS))
                .from(IDEA)
                .groupBy(IDEA.GP_STATUS)
                .fetch();

Похоже, поля возвращаются правильно, но я не могу понять, как их извлечь. Я знаю, каким может быть gp_status.

Так что мне нужно каким-то образом получить строку where gp_status = x

1 Ответ

0 голосов
/ 07 августа 2020

Если вам нужна только одна строка

Если вам нужна только одна строка, вы должны добавить этот предикат в свой запрос, т.е.

var result = dsl.select(IDEA.GP_STATUS, count())
                .from(IDEA)
                .where(IDEA.GP_STATUS.eq("x"))
                .groupBy(IDEA.GP_STATUS)
                .fetchOne();

В этот момент вы не Предложение GROUP BY больше не требуется:

var result = dsl.select(count())
                .from(IDEA)
                .where(IDEA.GP_STATUS.eq("x"))
                .fetchOne();

Обратите внимание, что в обоих случаях я использовал ResultQuery.fetchOne(), что дает Record, из которого вы можете извлекать значение разными способами, например

// Repeat the column expression from the SELECT clause
int count1 = result.get(count());

// Access columns by index, and redundantly supply the type again
// Assuming the second query was executed
int count2 = result.get(0, int.class);

Есть еще много способов.

Если вам нужен весь результат

Если вам нужен весь набор результатов, но для конкретного случая c просто хотите извлечь одну строку, тогда вы можете повторить Result, который расширяет List, или использовать Result.intoGroups(IDEA.GP_STATUS).get("x") или любой другой метод для Result, чтобы сделай что-нибудь подобное.

...