相关疑难解决方法(0)

如何在PostgreSQL中将平均值舍入到2位小数?

我通过Ruby gem'seququel'使用PostgreSQL.

我想要舍入到小数点后两位.

这是我的代码:

SELECT ROUND(AVG(some_column),2)    
FROM table
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

PG::Error: ERROR:  function round(double precision, integer) does 
not exist (Sequel::DatabaseError)
Run Code Online (Sandbox Code Playgroud)

运行以下代码时,我没有收到任何错误:

SELECT ROUND(AVG(some_column))
FROM table
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

sql postgresql sequel

165
推荐指数
6
解决办法
24万
查看次数

Postgres / Rails Active Record -- 查询舍入浮点值

我在 Rails 应用程序中使用 Postgres。将纬度/经度作为浮点值存储在数据库中。我希望能够比较位置的纬度/经度,但我只知道如何做到完全相等:

Location.where(lat: @lat, lon: @lon)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我希望 Postgres 读取,比如 71.233434 等于 71.233545,或者其他什么。换句话说,我可以查询舍入相等或范围内的相等吗?

我已经在 Google 上进行了相当广泛的搜索(也许使用了错误的术语?我想不出它。“Active Record Postgres float inside”,“Active Record Postgres rounded query”等)。但运气不好。我只找到了如何对来自数据库的值进行舍入,这没有多大帮助,因为这在 Ruby 中很容易做到。

有任何想法吗?我更喜欢某种 Active Record 解决方案(如果存在),但如果不存在,我也绝对会欣赏(指向)实际查询代码的链接。

谢谢!

编辑- 看着这个答案,我尝试了以下操作:

Location.find_by_sql("SELECT * FROM locations WHERE lat = ROUND(30.67035, 0.001)")
Run Code Online (Sandbox Code Playgroud)

希望在数据库中找到纬度值为 30.6703649 的位置,但我遇到了以下错误:

ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  function round(numeric, numeric) does not exist
LINE 1: SELECT * FROM places WHERE lat = ROUND(30.67035, 0.001)
Run Code Online (Sandbox Code Playgroud)

当我尝试相反的方法时,基本上会出现相同的错误,这更有意义:

Location.find_by_sql("SELECT * FROM locations WHERE ROUND(lat, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql activerecord ruby-on-rails ruby-on-rails-4

3
推荐指数
1
解决办法
2165
查看次数