簡體   English   中英

SQLAlchemy從子查詢中選擇並按子查詢字段排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM