如何按大小写降序排列?
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())
我想使用 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())