Clojure jdbc对sum的奇怪响应

Clojure jdbc对sum的奇怪响应,jdbc,clojure,Jdbc,Clojure,Im正在尝试执行两个计数查询的简单总和聚合: (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})

Im正在尝试执行两个计数查询的简单总和聚合:

(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})
0米

为什么?为什么是我?发生了什么事

编辑2:这是大十进制表示法。我仍然想知道为什么它突然使用BigDecimal。在JDBC中,
sum
的处理方式是否不同?db(postgres)是否为
sum
返回不同的数据类型

编辑3:Postgres返回总和聚合的通用<代码>数值类型。这在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})

正如jas提到的,这是大十进制记数法。只要使用
(double value)
,您就可以将BigDecimal转换为double,如果您确定不需要分数,甚至可以转换为long

编辑:实际解决方案:

(extend-protocol jdbc/ISQLValue

BigDecimal
(sql-value [value] (long value)))

我不会说这是重复的,但它可能会有所帮助:请记住,如果该值真的不符合一个良好的点,那么这可能会引发异常。在我的例子中,总和总是以数万为单位,数据量增长非常缓慢。