Jul*_*lie 5 postgresql ruby-on-rails
我正在尝试编写一个函数,该函数按非常大的表(数百万行)中的某些列进行分组。有什么办法可以解决find_each
这个问题,还是因为我不想按 id 列订购,所以这是不可能的?
我的查询的 SQL 是:
SELECT derivable_type, derivable_id FROM "mytable" GROUP BY derivable_type, derivable_id ORDER BY "mytable"."id" ASC;
railsfind_each
会使用reorder
语句自动添加 ORDER BY 子句。我尝试将 SQL 更改为:
SELECT MAX(id) AS "mytable"."id", derivable_type, derivable_id FROM "mytable" GROUP BY derivable_type, derivable_id ORDER BY "mytable"."id" ASC;
但这也不起作用。除了编写自己的 find_each 函数或覆盖 batches.rb 中的私有batch_order
函数之外,还有其他想法吗?
小智 0
我不确定我是否 100% 清楚您要做什么,但您的查询看起来与执行聚合 unique() 相同
SELECT derivable_type, derivable_id FROM "mytable" GROUP BY derivable_type, derivable_id ORDER BY "mytable"."id" ASC;
---- vv
SELECT DISTINCT(derivable_type, derivable_id) FROM "mytable" ORDER BY "mytable"."id" ASC;
Run Code Online (Sandbox Code Playgroud)
您应该能够使用 Active Record 来完成此操作,并结合 find_each (如果Mytable
是您的模型):
Mytable.all.group(:derivable_type, :derivable_id).distinct.find_each
# gives => #<Enumerator: #<ActiveRecord::Relation [...]>:find_each({:start=>nil, :finish=>nil, :batch_size=>1000, :error_on_ignore=>nil})>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2019 次 |
最近记录: |