sql分组查询并获取其它字段

数据库表

sql分组查询并获取其它字段_第1张图片

需求

按照uc分组,获取score最大值,并且要获取相应的duration

sql实现

传统的group by,不能查询额外的列

select uc, max(score)
from t_ch
group by uc;

查询结构:
sql分组查询并获取其它字段_第2张图片
使用row_number函数:
注意:mysql8.0版本需在8.0以上

select t.uc, t.score, t.duration
from (
         select uc, score, duration, row_number() over (partition by uc order by score desc ) as rn
         from t_ch
     ) t
where rn = 1;

查询结果:
sql分组查询并获取其它字段_第3张图片

sqlalchemy实现

subquery = db.session.query(
            t_ch.uc,
            t_ch.score,
            t_ch.duration,
            func.row_number().over(partition_by=t_ch.uc, order_by=desc(t_ch.score)).label("rn")
        ).subquery()

result= db.session.query(subquery.c.uc, subquery.c.score, subquery.c.duration). \
            filter(subquery.c.rn== 1).all()

你可能感兴趣的:(数据库,python,sql,python)