Sortieren von Zeilen durch Zählung eines many-to-many zugehörigen Datensatz
-
27-09-2019 - |
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 Venue
s, die alle CheckIn
s 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 CheckIn
s 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!
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