我有一个模型,我使用Django ORM从表中提取平均值.我想要舍入Avg值,我该怎么做?
请参阅下文我从YYYY-MM格式的按日期分组的价格模型中提取平均价格,我想自动提取四舍五入到最接近数字的平均值.
rs = Prices.objects.all.extra(select={
'for_date': 'CONCAT(CONCAT(extract( YEAR from for_date ), "-"),
LPAD(extract(MONTH from for_date), 2, "00"))'
}).values('for_date').annotate(price=Avg('price')).order_by('-for_date')
Run Code Online (Sandbox Code Playgroud) 我有一个关于PostgreSQL 9.2中浮点数的新手问题.
是否有直接舍入浮点数的函数,即不必先将数字转换为数字类型?
另外,我想知道是否存在以任意度量单位舍入的函数,例如最接近0.05?
首先将数字转换为十进制形式时,以下查询可以完美地运行:
SELECT round(1/3.::numeric,4);
round
--------
0.3333
(1 row)
Time: 0.917 ms
Run Code Online (Sandbox Code Playgroud)
但是,我真正希望实现的是以下内容:
SELECT round(1/3.::float,4);
Run Code Online (Sandbox Code Playgroud)
目前给我以下错误:
ERROR: function round(double precision, integer) does not exist at character 8
Time: 0.949 ms
Run Code Online (Sandbox Code Playgroud)
谢谢
我在 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)