2014-09-20 36 views
0

我有以下語句返回10個最高項目。使用ActiveRecord按字母順序對10個最高項目進行排序

Timesheet.joins(:project).select('projects.name as name, SUM(value) AS Minutes').group('projects.name').order('Minutes DESC').limit(10) 

如何按字母順序排列它們?我試圖在聲明後面放置.order('name'),但這不起作用。

+1

你試過用「sort_by(&:name)」結束這個嗎?它不會在查詢中排序,而是使用ruby Enumerable#sort_by排序。 (對不起,沒有在我的手機鍵盤上打勾) – engineersmnky 2014-09-20 01:20:25

+0

Try:'Timesheet.joins(:project).select('projects.name as project_name,SUM(value)AS minutes')。group('projects.name')。order (:project_name =>:asc,:minutes =>:desc).limit(10)' – Surya 2014-09-20 06:14:36

+0

@engineersmnky很好,如果你把它作爲答案添加,我會將它標記爲這樣。 Surya不起作用,因爲它會產生一個查詢,不會按照價值取10個最高項目,而只是按字母順序排列的前10個項目。 – rept 2014-09-20 09:52:19

回答

2

可以使用Enumerable#sort_by方法,像這樣

Timesheet.joins(:project). 
    select('projects.name as name, SUM(value) AS Minutes'). 
    group('projects.name'). 
    order('Minutes DESC'). 
    limit(10). 
    sort_by(&:name) 

這將運行原來的查詢,然後使用sort_by添加排序要求的級別。

相關問題