[英]SQLAlchemy select from subquery and order by subquery field
我有一個在jsonb字段中帶有推文的數據庫表。 我有一個查詢,以查詢轉發次數最多的推文,這是這樣的:
SELECT * FROM (
SELECT DISTINCT ON (raw->'retweeted_status'->'id_str')
raw->'retweeted_status' as status,
raw->'retweeted_status'->'retweet_count' as cnt
FROM tweet
WHERE (raw->'retweeted_status') is not null
ORDER BY raw->'retweeted_status'->'id_str', cnt DESC
) t
ORDER BY cnt DESC
我正在嘗試使用sqlalchemy創建此查詢,這是到目前為止我到達的地方:
session.query(Tweet.raw['retweeted_status'],
Tweet.raw['retweeted_status']['retweet_count'].label('cnt'))\
.filter(~Tweet.raw.has_key('retweeted_status'))\
.distinct(Tweet.raw['retweeted_status']['id_str']).order_by(Tweet.raw['retweeted_status']['id_str'].desc()).subquery()
但是如何從cnt到order?
它可能不會產生您所顯示的確切查詢,但應該為您指明正確的方向:您可以在order_by
使用標簽'cnt'
,例如: .order_by('cnt')
。
此外,您可以將標簽用作sqlalchemy.desc
函數的參數。 加起來:
from sqlalchemy import desc
q = (
session.query(
Tweet.raw['retweeted_status'],
Tweet.raw['retweeted_status']['retweet_count'].label('cnt')
)
.filter(~Tweet.raw.has_key('retweeted_status'))
.distinct(
Tweet.raw['retweeted_status']['id_str']
)
.order_by(desc('cnt'))
).subquery()
附加提示:如果將查詢放在括號中,則可以很好地格式化查詢。
您可能也想閱讀有關python sqlalchemy標簽用法的一般問題的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.