调用聚合函数JOOQ的别名列结果

时间:2015-05-05 15:53:28

标签: postgresql postgresql-9.3 jooq

我目前正在尝试从JOOQ查询生成器和PostgreSQL中的此查询中检索单个double值作为数据库,前提是DRINKS.PRICE的类型为double,ORDER_DRINK.QTY的类型为整数。

Record rec = create.select(DSL.sum(DRINKS.PRICE.multiply(ORDER_DRINK.QTY)).as("am_due")).from(ORDERS
                        .join(ORDER_DRINK
                            .join(DRINKS)
                            .on(DRINKS.DRINK_KEY.equal(ORDER_DRINK.DRINK_KEY)))
                        .on(ORDERS.ORDKEY.equal(ORDER_DRINK.ORDER_KEY)))
                        .where(ORDERS.TOKEN.eq(userToken))
                        .fetchOne();

正如我从(简要)教程中所理解的那样,一旦我从该别名记录中检索了值,其形式为:

double v = rec.getValue("am_due");

我应该将所有价格的总和乘以它们的数量。 不过,我得到的是NullPointerException。

非常欢迎任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:1)

您的jOOQ用法是正确的,但我怀疑您的总和只是null,因为:

  • 您的加入不会返回任何记录
  • 您的所有乘法操作数均为null

由于您将Double拆箱到double,因此您获得了NullPointerException。你可以解决这个问题

...使用Java:

Double v1 = rec.getValue("am_due");               // will return null
double v2 = rec.getValue("am_due", double.class); // will return 0.0

...使用jOOQ / SQL

Record rec = create.select(DSL.nvl(
  DSL.sum(
    DRINKS.PRICE.multiply(ORDER_DRINK.QTY)
  ), 0.0
).as("am_due"))