Результат подсчета подзапроса SQLAlchemy - PullRequest
0 голосов
/ 19 июня 2020

У меня есть запрос 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)

Но это подсчет столбцов перед применением отдельного оператора, поэтому счетчик неверен. Я был бы очень признателен, если бы кто-нибудь мог мне помочь или сказать, где я делаю ошибку, я гуглил все утро и не могу найти ответ.

1 Ответ

0 голосов
/ 19 июня 2020

ааа, я идиот, должен уделять больше внимания тому, что я делаю, добавил псевдоним, а затем удалил дополнительный столбец, по которому я группировал. Однако, если кто-то еще когда-нибудь столкнется с чем-то похожим, вот рабочий код.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...