调用聚合函数 JOOQ 的别名列结果
Call aliased column result of aggregate function JOOQ
我目前正在尝试从 JOOQ 查询生成器和 PostgreSQL 作为数据库的查询中检索单个双精度值,前提是 DRINKS.PRICE 是双精度类型,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。
非常欢迎任何帮助。
谢谢。
你的 jOOQ 用法是正确的,但我怀疑你的总和只是 null
因为:
- 您的加入没有return任何记录
- 你所有的乘法运算数都是
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"))
我目前正在尝试从 JOOQ 查询生成器和 PostgreSQL 作为数据库的查询中检索单个双精度值,前提是 DRINKS.PRICE 是双精度类型,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。
非常欢迎任何帮助。 谢谢。
你的 jOOQ 用法是正确的,但我怀疑你的总和只是 null
因为:
- 您的加入没有return任何记录
- 你所有的乘法运算数都是
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"))