SQLAlchemy:返回按列的最大值筛选的记录

2024-06-01 03:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

总之,我对一个SQLA请求有问题;目标是返回一个counter列中具有最大值的记录:

此操作正常-返回正确的记录:

m=12 # arbitrary example of a max value of counter = 12
qry = session.query(Data).
      filter(Data.user_id == user_id,Data.counter == m)

下面的代码不起作用-返回None

from sqlalchemy import func
qry = session.query(Data).
      filter(Data.user_id == user_id,
      Data.counter == func.max(Data.counter).select())

请注意,具有最大值的记录(如果相关的话)不会超过一条。

当然,有一种方法可以返回在其中一列中具有最大值的记录。有什么想法吗?


Tags: ofid目标datasession记录counterfilter
1条回答
网友
1楼 · 发布于 2024-06-01 03:21:54

听起来你可以简单地按计数器的降序排序,得到第一个结果。。。

from sqlalchemy import desc

qry = session.query(Data).filter(
      Data.user_id == user_id).order_by(
      desc(Data.counter).limit(1)

但是,如果您关心对大型数据集进行排序,则可以使用子查询。。。

subqry = session.query(func.max(Data.counter)).filter(Data.user_id == user_id)
qry = session.query(Data).filter(Data.user_id == user_id, Data.counter == subqry)

从本质上讲,qry应该是。。。

SELECT * 
FROM data 
WHERE data.user_id = :user_id AND data.counter = (
    SELECT max(data.counter) AS max_1 
    FROM data 
    WHERE data.user_id = :user_id GROUP BY data.user_id
);

相关问题 更多 >