如何在查询中找到用户的位置?

时间:2013-08-16 13:25:13

标签: sqlalchemy

如何在查询中查找用户的位置? 我(我正在使用MySQL)

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

我有用户ID,如何查找特定id的位置是有序数组? (我可以返回all并迭代,但是在数据库级别上有解决这个问题的方法,需要快速运行)

1 个答案:

答案 0 :(得分:2)

数据库应该支持window functions来执行此操作。原始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。