jooq:选择count group by

ipakzgxi  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(540)

我试图计算表中gp\u status字段的不同可能性。我有一个sql查询可以工作,只是不太明白如何将它转录到jooq。

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

到目前为止,我有这个

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

看起来字段恢复得很正确,但我不知道如何提取它们。我知道可能的gpu状态是什么。
所以我得想办法去吵架 where gp_status = x

uklbhaso

uklbhaso1#

如果你只需要一排

如果只需要一行,那么应该将该 predicate 添加到查询中,即。

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);

还有很多方法。

如果你需要整个结果

如果需要整个结果集,但是对于特定的情况,只需要提取一行,那么可以迭代 Result ,延伸 List ,或使用 Result.intoGroups(IDEA.GP_STATUS).get("x") 或任何其他方法 Result 做类似的事情。

相关问题