Я пытаюсь выполнить простое суммирование сумм двух запросов на количество:
(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? Почему м? Что происходит?
EDIT2: Это нотация BigDecimal. Я все еще хотел бы знать, почему это внезапно использует BigDecimal. sum
трактуется по-другому в JDBC? Возвращает ли db (postgres) другой тип данных для sum
?
EDIT 3: Postgres возвращает общий тип numeric
для суммирования. Это преобразуется в BigDecimal в JDBC.
Таким образом, другой способ последовательного получения возвращаемого значения одного и того же типа состоит в приведении в запросе:
(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})