Java 使用jooq创建直方图

Java 使用jooq创建直方图,java,sql,histogram,jooq,Java,Sql,Histogram,Jooq,我想在一个表的单个列中创建一个值的柱状图,我已经知道该列的所有可能值 因此,在伪sql中,我想做如下操作: select count(my_col where my_col == "val_1") as "count_for_val_1", count(my_col where my_col == "val_2") as "count_for_val_2", etc 一个警告是,我想在joog中使用这种查询构建风格,因为它使条件构建更容易: SelectQuery query = contex

我想在一个表的单个列中创建一个值的柱状图,我已经知道该列的所有可能值

因此,在伪sql中,我想做如下操作:

select
count(my_col where my_col == "val_1") as "count_for_val_1",
count(my_col where my_col == "val_2") as "count_for_val_2",
etc
一个警告是,我想在joog中使用这种查询构建风格,因为它使条件构建更容易:

SelectQuery query = context.selectQuery();
query.addSelect(...)
query.addFrom(...)
etc
更新:好,这似乎有效:

SelectQuery query = context.selectQuery();
query.addSelect(my_table.my_col.decode("val_1", "any string here?").count().as("count_for_val_1"));
query.addSelect(my_table.my_col.decode("val_2", "any string here?").count().as("count_for_val_2"));
etc
现在,在JOOQ中实现这一点的最佳方法是什么?有太多…

您可以使用jOOQ函数,它可以与所有聚合函数一起使用。即

DSL.使用(配置)
.选择(
count().filterWhere(MY_COL.eq(“val_1”)).as(“count_for_val_1”),
count().filterWhere(MY_COL.eq(“val_2”)).as(“count_for_val_2”),
...
)
.来自(…)
SQL标准指定了PostgreSQL本机支持的聚合(…)过滤器(其中…语法:

选择
count(*)过滤器(其中my_col='val_1')为“count_for_val_1”,
count(*)过滤器(其中my_col='val_2')为“count_for_val_2”,
...
从…起
在所有其他数据库中,jOOQ将生成以下内容

选择
计数(当my_col='val_1'然后1结束时的情况)为“count_for_val_1”,
计数(当my_col='val_2'然后1结束时的情况)为“count_for_val_2”,
...
从…起

您可能需要使用下面的答案字段为您的问题提供自己的答案。这样,对于未来的游客来说,答案将立即变得清晰。+1对卢卡斯长老评论。如果你把答案放在下面一个自贴的答案中,这会使它更具可读性。