2014-09-20 3 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)"로 끝내려고 했습니까? 그것은 쿼리에서 정렬하지 않고 루비 Enumerable # sort_by를 사용합니다. (미안 휴대폰의 키보드에 다시 틱이 표시되지 않습니다.) – engineersmnky

+0

시도 : 'Timesheet.joins (: project) .select ('프로젝트 이름, SUM (값) AS 분 '). (: project_name => : asc, : minutes => : desc). 제한 (10)' – Surya

+0

@engineersmnky 위대한 작품, 당신이 대답으로 추가하면 나는 그것을 그 것처럼 표시 할 것입니다. Surya는 값으로 10 개의 가장 높은 프로젝트를 취하지 않고 대신 알파벳순으로 처음 10 개를 취할 쿼리를 생성하기 때문에 작동하지 않습니다. – rept

답변

2

당신은 원래 쿼리를 실행 한 다음 요청 정렬 추가 수준을 추가 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) 

이 같은 Enumerable#sort_by 방법을 사용할 수 있습니다.

관련 문제