2010-10-05 55 views
0

我知道还有很多其他的SO条目看起来像这样,但是我还没有找到能真正回答我的问题的人,所以希望你们其中一位能够要么回答它,要么指向另一个与之相关的SO问题。通过多对多关联记录的计数对行进行排序

基本上,我有以下查询返回Venue s有任何CheckIn s包含搜索Keyword(本例中的“foobar”)。

SELECT DISTINCT v.* 
FROM "venues" v 
    INNER JOIN "check_ins" c ON c."venue_id"  = v."id" 
    INNER JOIN "keywordings" ks ON ks."check_in_id" = c."id" 
    INNER JOIN "keywords" k ON ks."keyword_id" = k."id" 
WHERE (k."name" = 'foobar') 

我想SELECTORDER BY匹配Keyword对于每个给定Venue的计数。例如。如果已经创建了5 CheckIn s,并且与Keyword相关联,那么应该有一个返回的列(称为类似keyword_count),其值为5,该列被排序。

理想情况下,应该在SELECT条款中没有任何疑问,或者根本没有任何疑问。

我一直在为此挣扎一段时间,我的想法只是空白(也许这是一天太长),所以一些帮助将在这里非常感谢。

在此先感谢!

回答

1

听起来像是你需要的东西,如:

SELECT v.x, v.y, count(*) AS keyword_count 
FROM "venues" v 
    INNER JOIN "check_ins" c ON c."venue_id"  = v."id" 
    INNER JOIN "keywordings" ks ON ks."check_in_id" = c."id" 
    INNER JOIN "keywords" k ON ks."keyword_id" = k."id" 
WHERE (k."name" = 'foobar') 
GROUP BY v.x, v.y 
ORDER BY 3 
+0

哦男人,我是如此接近。我想昨晚我太累了。先生,你是英雄! – 2010-10-06 05:01:36

相关问题