如何在rails 4中实现以下功能?
这是我的PostgreSQL查询并且可以正常工作
SELECT lower(name) as c_name, count(*) as cc FROM categories GROUP BY c_name ORDER BY cc desc LIMIT 3
Ii给了我以下结果
"ecommerce solutions";6
"vmware";6
"big data analytics";5
但是当我在Rails 4中编写相同的查询时
Category.select("lower(name) as c_name, count(*) as cc").group("c_name").order("cc desc").limit(3)
以上查询生成以下查询,该查询与上述PostgreSQL查询相同
SELECT lower(name) as c_name, count(*) as cc FROM "categories" GROUP BY c_name ORDER BY cc desc LIMIT 3
给出以下结果
[#<Category id: nil>, #<Category id: nil>, #<Category id: nil>]
为什么会这样?当我将查询剪切为
时 Category.select("lower(name)").limit(3)
这也不起作用,并导致
[#<Category id: nil>, #<Category id: nil>, #<Category id: nil>]
我想在lower(name)
上进行分组计数作为聚合,我在name
模型中有Category
的差异很多
实施例。数据集
"Vmware" and "VMware" and "VMWARE" and "vmware"
如何在Rails 4中对lower(name)进行分组?
简单来说,如何在Rails 4中编写以下等效查询?
SELECT lower(name) as c_name, count(*) as cc FROM categories GROUP BY c_name ORDER BY cc desc LIMIT 3
答案 0 :(得分:4)
结果是正确的,但Rails显示错误。只需手动访问结果:
results = Category.select("lower(name) as c_name, count(*) as cc").group("c_name").order("cc desc").limit(3)
results.first['c_name']