1

クエリでユーザーの位置を見つける方法は? 私は持っています(私はMySQLを使用しています)

session.query(UserModel).order_by(desc(UserModel.age)).all()

私はユーザーIDを持っていますが、その特定のIDの位置を見つける方法は順序付けられた配列ですか? (私はすべてを返して繰り返すことができますが、データベースレベルでこれを解決するためのより簡単な方法はありますか?高速に実行する必要があります)

4

1 に答える 1

2

データベースは、これを行うためのウィンドウ関数をサポートする必要があります。生の 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 では機能しません。

于 2013-08-16T16:52:53.993 に答える