如何在查询中查找用户的位置? 我(我正在使用MySQL)
session.query(UserModel).order_by(desc(UserModel.age)).all()
我有用户ID,如何查找特定id的位置是有序数组? (我可以返回all并迭代,但是在数据库级别上有解决这个问题的方法,需要快速运行)
答案 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。