簡體   English   中英

SQLAlchemy 計數子查詢結果

[英]SQLAlchemy counting subquery result

我有一個 SQL 查詢,我想將其轉換為使用 ORM 但我無法獲得 ORM 來計算子查詢的結果。 所以我的工作 SQL 是:

select FOO
       ,BAR
       ,TOTALCOUNT
from(
select FOO
      ,BAR
      ,COUNT(BAR) OVER (PARTITION BY FOO) AS TOTALCOUNT
from(
SELECT distinct
      [FOO]
      ,[BAR]
  FROM [database].[dbo].[table]
)m
    )m
WHERE TOTALCOUNT > 10

我嘗試使用 ORM 創建等效代碼,但我的最終結果只有 1 用於最終計數,我嘗試過的代碼如下

    subs = session.query(table.FOO,table.BAR).filter(
                            table.date > datetime.now() - timedelta(days=10),
                        ).distinct().subquery()


   result = pd.read_sql(session.query(subs.c.FOO,subs.c.BAR,func.count(subs.c.BAR).label('TOTALCOUNT')).group_by(subs.c.FOO,subs.c.BAR).statement,session.bind)

我也嘗試在一個查詢中做到這一點:

result = pd.read_sql(session.query(table.FOO,table.BAR,func.count(table.BAR).label("TOTALCOUNT")).filter(
                and_(
                    table.date> datetime.now() - timedelta(days= 30),
                    )
                ),groupby.order_by(table.FOO).distinct().statement,session.bind)

但這是在應用 distinct 運算符之前計算列數,因此計數不正確。 如果有人可以幫助我或告訴我哪里出錯了,我將不勝感激,我整個早上都在谷歌上搜索,似乎找不到答案。

啊,我是個白痴,應該更加注意我在做什么,添加別名,然后刪除我分組的附加列。 但是,如果其他人在這里遇到類似的事情,那就是工作代碼。

subs = session.query(table.FOO,table.BAR).filter(
                        table.date > datetime.now() - timedelta(days=10),
                     ).distinct().subquery().alias('subs')


result = pd.read_sql(session.query(subs.c.FOO,func.count(subs.c.BAR).label('TOTALCOUNT'))./
    group_by(subs.c.FOO).statement,session.bind)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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