我有一张桌子,上面有(除其他外)名字和等级。我想返回所有唯一名称的集合,但是对于返回的每个名称,我想选择排名最高的行。这很简单,有两个嵌套的 SELECT 语句:
SELECT * FROM (SELECT * FROM foo ORDER BY rank DESC) AS ordered GROUP BY name
MySQL 为每个名称获取第一个“命中”,(因为更早的 ORDER BY)将始终是排名最高的。
现在,如果我想用 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 技巧或更优雅的数组操作来解决它!