クエリでユーザーの位置を見つける方法は? 私は持っています(私はMySQLを使用しています)
session.query(UserModel).order_by(desc(UserModel.age)).all()
私はユーザーIDを持っていますが、その特定のIDの位置を見つける方法は順序付けられた配列ですか? (私はすべてを返して繰り返すことができますが、データベースレベルでこれを解決するためのより簡単な方法はありますか?高速に実行する必要があります)
クエリでユーザーの位置を見つける方法は? 私は持っています(私はMySQLを使用しています)
session.query(UserModel).order_by(desc(UserModel.age)).all()
私はユーザーIDを持っていますが、その特定のIDの位置を見つける方法は順序付けられた配列ですか? (私はすべてを返して繰り返すことができますが、データベースレベルでこれを解決するためのより簡単な方法はありますか?高速に実行する必要があります)
データベースは、これを行うためのウィンドウ関数をサポートする必要があります。生の SQL クエリは次のようになります。
SELECT pos FROM
(SELECT id, row_number() OVER (ORDER BY age DESC) AS pos FROM user) AS sub
WHERE sub.id = :id;
SQLAlchemy では:
from sqlalchemy import func, desc
user_id = 42
sub = (session
.query(
UserModel.id,
func.row_number().over(order_by=desc(UserModel.age)).label('pos'))
.subquery())
pos = session.query(sub.c.pos).filter(sub.c.id==user_id).scalar()
返されるインデックスは 1 ベースであることに注意してください。
一般的な RDBMS の中で、これは PostgreSQL、Oracle、MSSQL では機能しますが、MySQL や SQLite では機能しません。