Я пытаюсь вычесть результаты двух разных вызовов select
в SQLAlchemy как еще один select
, чтобы наконец вызвать order_by
, чтобы воссоздать следующий запрос:
SELECT reviews.id FROM reviews
ORDER BY (
SELECT (
SELECT COUNT(*) FROM review_upvoters WHERE review_id = reviews.id
) - (
SELECT COUNT(*) FROM review_downvoters WHERE review_id = reviews.id
)
);
Я попытался просто вычесть два выбора друг из друга (query_one - query_two
), два безрезультатно, и просмотр документов SQLAlchemy, но они точно не помогли.
То, что у меня сейчас есть, это:
upvoters_count = select([func.count()]).where(ReviewUpvoters.review_id == Review.id)
downvoters_count = select([func.count()]).where(ReviewDownvoters.review_id == Review.id)
reviews = Reviews.query.order_by(...)
, где я пытаюсь выяснить внутреннюю часть order_by
, чтобы правильно вычесть эти select
s.
(Если Reviews.query
выглядит странно, это потому, что я использую Gino для асинхронной поддержки Postgres, но в большинстве случаев он использует обычные объекты SQLAlchemy, поэтому это ни на что не должно влиять.)
Поскольку __sub__
не представляется определенным для Select
объектов, я немного озадачен этим, и я не на 100% заинтересован в реструктуризации таблиц, поэтому эти два находятся в одной таблице с чем-то, чтобы дифференцировать их.