sql >> Database >  >> RDS >> PostgreSQL

Postgres-vensterfunctiekolom met Rails

probeer dit:

Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")

het zou u Character-objecten moeten retourneren met een rangattribuut, zoals gedocumenteerd hier . Dit is echter mogelijk niet database-agnostisch en kan rommelig worden als u de objecten doorgeeft.

een andere (dure) oplossing is om een ​​rangkolom aan uw tabel toe te voegen, en een callback te laten herberekenen met .order wanneer een record wordt opgeslagen of vernietigd.

bewerken:

een ander idee dat geschikt is voor zoekopdrachten met één record kan hier worden gezien




  1. Waarom is deze INNER JOIN/ORDER BY mysql-query zo traag?

  2. mysql selecteer top n max waarden

  3. Maak geneste JSON-arrays met FOR JSON PATH

  4. Voeg meerdere rijen in SQLite-fout in (foutcode =1)