나는 (다른 것들 중에서) 이름과 계급을 가진 테이블을 가지고있다. 모든 고유 한 이름 집합을 반환하고 싶지만 반환 된 각 이름에 대해 가장 높은 순위의 행을 선택하고 싶습니다. 이 두 개의 중첩 SELECT 문에 간단하다 :ActiveRecord 중첩 SELECT - 수동 SQL없이 수행 할 수 있습니까?
SELECT * FROM (SELECT * FROM foo ORDER BY rank DESC) AS ordered GROUP BY name
MySQL은 먼저 항상 가장 높은 순위 하나가 될 것입니다 (때문에 BY 이전 ORDER의) 각각의 이름에 대해 "공격"합니다.
이제 ActiveRecord를 사용하여이 테이블에 연결하려면 약간의 손실이 있습니다. 위의 내용을 find_by_sql
에 넣을 수는 있지만 더러운 느낌입니다. 나는
result = foo.all
result.delete_if do |item|
isOutranked = false
result.each do |row|
if (row.name == item.name) and (row.rank > item.rank) then isOutranked = true
end
isOutranked
end
내가 가를 작동 생각처럼 뭔가를 시도했지만 여전히 같은 더 나은 방법이있을한다고 느낀다. ActiveRecord 속임수 또는보다 우아한 배열 조작을 통해 해결하면 환영할만한 것입니다!