Pra*_*nde 2 ruby postgresql ruby-on-rails ruby-on-rails-4
如何在rails 4中实现以下功能?
这是我的 PostgreSQL 查询并且正常工作
SELECT lower(name) as c_name, count(*) as cc FROM categories GROUP BY c_name ORDER BY cc desc LIMIT 3
Run Code Online (Sandbox Code Playgroud)
ii给我以下结果
"ecommerce solutions";6
"vmware";6
"big data analytics";5
Run Code Online (Sandbox Code Playgroud)
但是当我在 Rails 4 中编写相同的查询时
Category.select("lower(name) as c_name, count(*) as cc").group("c_name").order("cc desc").limit(3)
Run Code Online (Sandbox Code Playgroud)
以上查询生成以下查询,与上面的 PostgreSQL 查询相同
SELECT lower(name) as c_name, count(*) as cc FROM "categories" GROUP BY c_name ORDER BY cc desc LIMIT 3
Run Code Online (Sandbox Code Playgroud)
给出以下结果
[#<Category id: nil>, #<Category id: nil>, #<Category id: nil>]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?当我将查询切到
Category.select("lower(name)").limit(3)
Run Code Online (Sandbox Code Playgroud)
这也不起作用,结果变成
[#<Category id: nil>, #<Category id: nil>, #<Category id: nil>]
Run Code Online (Sandbox Code Playgroud)
我想以lower(name)计数作为聚合进行分组,我name在Category模型中有很多差异
前任。数据集
"Vmware" and "VMware" and "VMWARE" and "vmware"
Run Code Online (Sandbox Code Playgroud)
如何在 Rails 4 中按较低(名称)分组?
简单来说,如何在 Rails 4 中编写以下等效查询?
SELECT lower(name) as c_name, count(*) as cc FROM categories GROUP BY c_name ORDER BY cc desc LIMIT 3
Run Code Online (Sandbox Code Playgroud)
结果是正确的,但 Rails 显示错误。只需手动访问结果:
results = Category.select("lower(name) as c_name, count(*) as cc").group("c_name").order("cc desc").limit(3)
results.first['c_name']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |