【发布时间】:2019-10-31 09:49:42
【问题描述】:
我正在尝试执行两个计数查询的简单求和聚合:
(jdbc/query (db-connection)
"SELECT sum(t.count) AS count FROM (select 1 AS count union select 2 AS count) t")
=> ({:count 3})
(jdbc/query (db-connection)
"select count(1) from table_a")
=> ({:count 0})
(jdbc/query (db-connection)
"select count(1) from table_b")
=> ({:count 0})
(jdbc/query (db-connection)
"SELECT sum(t.count) AS count FROM (select count(1) from table_a union select count(1) from table_b) t")
=> ({:count 0M})
0M
为什么是 0M?为什么是M?怎么回事?
EDIT2:这是 BigDecimal 表示法。我仍然想知道为什么它突然使用 BigDecimal。 sum 在 JDBC 中的处理方式不同吗? db (postgres) 是否为 sum 返回不同的数据类型?
编辑 3:Postgres 为 sum 聚合返回通用的 numeric 类型。这在 JDBC 中被转换为 BigDecimal。
因此,另一种持续获得相同类型返回值的方法是在查询中进行强制转换:
(jdbc/query (db-connection)
"SELECT sum(t.count)::bigint AS count FROM (select count(1) from table_a union select count(1) from table_b) t")
=> ({:count 423602})
【问题讨论】:
-
我不会说这是重复的,但它可能会有所帮助:stackoverflow.com/questions/24814317/…