Nehmen wir an, es gibt eine Tabelle "Elemente", die drei Spalten hat: "ID", "POS" und "Neg", und das Ergebnis der Auswahl sollte durch das Ergebnis der Operation pos - neg
bestellt werden.Postgres: Wie erhält man die Zeilennummer, wenn sie nach dem Operationsergebnis geordnet ist?
So wird die folgende funktionieren soll:
SELECT
id,
pos - neg AS diff
FROM items
ORDER BY diff DESC
Jetzt muss ich Position einer bestimmten Zeile bekommen (in der Tabelle), um das Ergebnis der Bestellung von ‚diff‘. Ich habe es versucht:
WITH summary AS (
SELECT
i.id,
i.pos - i.neg AS diff,
ROW_NUMBER() OVER(ORDER BY diff) AS position
FROM items i)
SELECT s.* FROM summary s WHERE s.id = 351435254
aber die Ausführung gibt Fehler zurück: Spalte "Diff" existiert nicht.
Also, ist es möglich, die Position zu bekommen, oder wäre es besser, Diffs in einer separaten Spalte zu halten?
diff ist ein Alias Versuch 'ROW_NUMBER() OVER (ORDER BY i .pos - i.neg) AS position' statt –
@Richard, der funktioniert! Vielen Dank! – aspermag