如何在订购 Active Record 对象时使 NaN 值最低?
how to make NaN value as the lowest when ordering Active Record objects?
我想对我的 table 进行排序,但其中包含 NaN 值,
问题出在 ruby/rails NaN 被认为是最高的,我想将其设为最低?
我正在考虑从列表中删除 NaN
对非 NaN 列表进行排序并在其后添加 NaN
谁有更方便的方法?
我的数据库是 postgresql,列类型是 Decimal/BigDecimal,值是 Decimal/BigDecimal
架构是
create_table "download_speeds", force: :cascade do |t|
t.bigint "location_id", null: false
t.string "operator_name"
t.decimal "avg"
t.decimal "min"
t.decimal "max"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["location_id"], name: "index_download_speeds_on_location_id"
end
我想 sort/give 根据 avg
列降序排列到 downloads_speeds
最高 avg
最高(排名 1)
看起来 avg
的值应该总是正数。因此,在 sql 查询中用 0 代替 NaN 应该会给你想要的排序。您不必在 sql 中编写整个查询,只需要顺序子句:
DownloadSpeed.where(created_at: Date.today).order("CASE WHEN avg='NaN' THEN 0 ELSE 1 END, avg")
显然这只是 postgresql 使用 NaN
排序的方式
解决方法是使用 SQL
语法将 NaN
更改为 null
,然后设置选项以在订购时将 null
值设置为最后一个
DownloadSpeed.order(Arel.sql("nullif(avg, 'NaN') desc nulls last"))
相关问题:
Why do NULL values come first when ordering DESC in a PostgreSQL query?
我想对我的 table 进行排序,但其中包含 NaN 值,
问题出在 ruby/rails NaN 被认为是最高的,我想将其设为最低?
我正在考虑从列表中删除 NaN 对非 NaN 列表进行排序并在其后添加 NaN
谁有更方便的方法?
我的数据库是 postgresql,列类型是 Decimal/BigDecimal,值是 Decimal/BigDecimal
架构是
create_table "download_speeds", force: :cascade do |t|
t.bigint "location_id", null: false
t.string "operator_name"
t.decimal "avg"
t.decimal "min"
t.decimal "max"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["location_id"], name: "index_download_speeds_on_location_id"
end
我想 sort/give 根据 avg
列降序排列到 downloads_speeds
最高 avg
最高(排名 1)
看起来 avg
的值应该总是正数。因此,在 sql 查询中用 0 代替 NaN 应该会给你想要的排序。您不必在 sql 中编写整个查询,只需要顺序子句:
DownloadSpeed.where(created_at: Date.today).order("CASE WHEN avg='NaN' THEN 0 ELSE 1 END, avg")
显然这只是 postgresql 使用 NaN
解决方法是使用 SQL
语法将 NaN
更改为 null
,然后设置选项以在订购时将 null
值设置为最后一个
DownloadSpeed.order(Arel.sql("nullif(avg, 'NaN') desc nulls last"))
相关问题:
Why do NULL values come first when ordering DESC in a PostgreSQL query?