java - Jooq:选择计数组
问题描述
我正在尝试计算表中 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
解决方案
如果你只需要一行
如果您只需要一行,那么您应该将该谓词添加到您的查询中,即
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()
了 ,它产生 a 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
, which extends List
,或使用Result.intoGroups(IDEA.GP_STATUS).get("x")
或任何其他方法Result
来做类似的事情。
推荐阅读
- android - Android studio:如何使用回收器视图从firebase按升序显示数据的位置
- maple - 如何解决未知边界的 BVP?
- oracle - 如何在 Oracle 分层 SQL 中的每个路径中找到最大级别?
- javascript - AJAX 加载更多功能乘以旧数据?
- dart - 如何在 Dart 中发出网络请求并返回一个 json 对象
- php - 用户应如何为 oauth2 传递令牌
- assembly - 在程序集中解析命令行参数
- android - 如何将 CreateDataBinding 导入 Xamarin
- apache-spark - 如何使用 Spark 数据集和 UDF 分析类型不匹配错误
- c++ - C++ 字符串到 wstring 打印不正确,无法获取 unicode 路径