Frage

Ich weiß, dass es viele andere SO-Einträge sind, die wie diese erscheinen, aber ich habe festgestellt, nicht eine, die eigentlich meine Frage beantwortet, so hoffentlich einer von euch entweder beantworten kann, oder mich zu einem anderen SO Frage verweisen, die verwandt ist .

Grundsätzlich habe ich die folgende Abfrage, dass die Renditen Venues, die alle CheckIns haben, dass die gesuchte Keyword enthalten ( „foobar“ in diesem Beispiel).

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

Ich möchte die Zählung des angepassten SELECT für jede gegebene ORDER BY Keyword und Venue. Z.B. wenn es 5 CheckIns gewesen sein, die erstellt wurden, mit diesen Keyword zugeordnet ist, dann sollte es eine zurück Spalte sein (genannt etwas wie keyword_count) mit dem Wert 5, die sortiert wird.

Im Idealfall sollte dies ohne Abfragen in der SELECT Klausel durchgeführt werden, oder vorzugsweise gar keinem.

Ich habe mit diesem für eine Weile zu kämpfen und mein Geist ist einfach leer geht (vielleicht auch es ist schon lange einen Tag) so etwas Hilfe stark hier geschätzt werden würde.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Klingt wie Sie brauchen so etwas wie:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top