Sql Rails-按组搜索记录
我想构造一个搜索查询,根据记录的“tag”属性对记录进行分组,并为每个标记组查找一定数量的记录。我的“位置”表如下:Sql Rails-按组搜索记录,sql,ruby-on-rails,search,Sql,Ruby On Rails,Search,我想构造一个搜索查询,根据记录的“tag”属性对记录进行分组,并为每个标记组查找一定数量的记录。我的“位置”表如下: | ID | name | geom | rating_av | tag | 有四个不同的标签,一个地方可以分配-城市,食品,酒店和景点。我希望我的搜索能够返回每个标签组的前五条记录,按评级_av排序,并附加一个几何约束。我可以使用以下方法一次查询每个标记,看起来效果不错: Place.find(:all, :limit => 5, :conditions => [
| ID | name | geom | rating_av | tag |
有四个不同的标签,一个地方可以分配-城市,食品,酒店和景点。我希望我的搜索能够返回每个标签组的前五条记录,按评级_av排序,并附加一个几何约束。我可以使用以下方法一次查询每个标记,看起来效果不错:
Place.find(:all, :limit => 5, :conditions => ["geom && ? and tag = ?", Polygon.from_coordinates([[[xMinLng, yMinLat], [xMinLng, yMaxLat], [xMaxLng, yMaxLat], [xMaxLng, yMinLat], [xMinLng, yMinLat]]], 4326), "food"])
但是,我希望能够在单个查询中检索每个标记的前五条记录。构造这样一个查询的最佳方法是什么?我是否应该考虑添加“tag”列作为索引以帮助搜索?我尝试将:group=>'tag'添加到查询中,但我不太确定如何正确使用它,因为我返回了以下错误:
ActiveRecord::StatementInvalid (PGError: ERROR: column "places.id" must appear in the GROUP BY clause or be used in an aggregate function
非常感谢您的帮助,谢谢
Place.all(
:joins => "INNER JOIN (
SELECT a.id, COUNT(*) AS ranknum
FROM places AS a
INNER JOIN places AS b ON (a.tag = b.tag) AND (a.rating_av <= b.rating_av)
GROUP BY a.id
HAVING COUNT(*) <= 5
) AS d ON (places.id = d.id)",
:order => "places.tag, d.ranknum"
)
有关此查询的详细说明,请查看此项。感谢您的帮助,是否有基于Ruby的方法实现相同的查询?更新了我的答案,请查看。