gpt4 book ai didi

java - 使用 jooq 创建直方图

转载 作者:行者123 更新时间:2023-12-02 09:46:41 24 4
gpt4 key购买 nike

我想创建表格单列中值的直方图,并且我已经知道该列的所有可能值

所以,在伪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 的 filterWhere()函数,可与所有聚合函数一起使用。即

DSL.using(configuration)
.select(
count().filterWhere(MY_COL.eq("val_1")).as("count_for_val_1"),
count().filterWhere(MY_COL.eq("val_2")).as("count_for_val_2"),
...
)
.from(...)

SQL 标准指定了 AGGREGATE(...) FILTER (WHERE ...) 语法,PostgreSQL 本身支持该语法:

SELECT
count(*) FILTER (WHERE my_col = 'val_1') AS "count_for_val_1",
count(*) FILTER (WHERE my_col = 'val_2') AS "count_for_val_2",
...
FROM ...

在所有其他数据库中,jOOQ 将生成以下内容

SELECT
count(CASE WHEN my_col = 'val_1' THEN 1 END) AS "count_for_val_1",
count(CASE WHEN my_col = 'val_2' THEN 1 END) AS "count_for_val_2",
...
FROM ...

关于java - 使用 jooq 创建直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com