在 Rails 4 中使用 group by 选择小写列或选择lower(column)

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)计数作为聚合进行分组,我nameCategory模型中有很多差异

前任。数据集

"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)

hed*_*sky 5

结果是正确的,但 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)