如何按大小写降序排列?

How to order by case, descending?

我想使用 SQLAlchemy 构建此查询:

select * from t order by
case
    when t.x!=0 then t.y
    when t.x==0 then 0
end desc;

我尝试了以下方法:

db.session.query(t).order_by(
    db.func.desc(
        db.func.case([
            (t.x!=0, t.y),
            (t.x==0, 0)
        ]
    )
)

但它引发了ProgrammingError 'You have an error in your SQL syntax'。如何在 SQLAlchemy 中编写此 case 语句?

case函数不是db.func.case,而是sqlalchemy.sql.expression.case

case 不是函数,存在于 db 实例中。您可以指定一个 else 子句而不是第二个 when。您可以只在表达式上调用 .desc() 而不是用 desc() 包装它。查询应如下所示:

db.session.query(t).order_by(db.case(((t.x != 0, t.y),), else_=0).desc())