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 回答