Ich bin in der Lage, die folgende PSQL-Abfrage (am Ende) zu verwenden, um die dense_rank
einer einzelnen Zeile in meiner Tabelle zu erhalten, möchte ich jedoch angezeigt werden können dies als:PSQL dose_rank eines Artikels aus verschiedenen Gesamtpositionen
dense_rank OUT OF total distinct ranks
da zum Beispiel dense_rank
ermöglicht ‚Beziehungen‘, so zu sprechen, wenn ich 100 Zeilen haben und die gewählte Zeile 14. (und es gibt nur 59 verschiedene Reihen) gewählt, ich möchte sagen:
Ranked 14th out of 59
Gibt es eine Möglichkeit, meine Abfrage zu ändern, um dies zu erreichen, oder muss ich mehrere Abfragen verwenden?
Hier ist meine Frage:
SELECT ranked.*
FROM
(SELECT id,
postable_id,
spread_count,
bury_count,
read_count,
(spread_count*3) + (bury_count*-2) + (read_count*-1) AS score,
dense_rank() OVER (
ORDER BY (spread_count*3) + (bury_count*-2) + (read_count*-1) DESC) AS RANK
FROM posts) AS ranked
WHERE id = ?
Dies scheint zu funktionieren, @vkp, danke! Kannst du diese schwarze Magie erklären, wenn du Zeit hast? Sehr geschätzt. – lightyrs
@lightyrs .. die einzige zusätzliche Sache, die ich hinzugefügt habe, ist 'MAX (RNK) OVER()', die den maximalen Rang erhält (d. H. 59 in diesem Beispiel). 'RNK' ist das, was Sie bereits berechnet haben. Verketten sie Sie bekommt, was benötigt wird. –