0

このような SO エントリが他にもたくさんあることは知っていますが、実際に私の質問に答えるエントリが見つからないので、誰かがそれに答えるか、関連する別の SO の質問を教えてくれることを願っています。

基本的に、検索された(この例では「foobar」)を含むVenues を持つ sを返す次のクエリがあります。CheckInKeyword

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')

したいのSELECTと、指定された ごとORDER BYに一致したの数。たとえば、 に関連付けられた 5 つの が作成された場合、ソートされた値を含む( のようなものと呼ばれる) 列が返されるはずです。KeywordVenueCheckInKeywordkeyword_count5

SELECT理想的には、これは句にクエリを使用せずに実行するか、できればまったくクエリを使用しないで実行する必要があります。

私はしばらくこれに苦労してきましたが、頭が真っ白になりました(おそらく1日が長すぎました)ので、ここでいくつかの助けをいただければ幸いです.

前もって感謝します!

4

1 に答える 1

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
于 2010-10-05T13:30:00.797 に答える