sqlalchemy - Как сгруппировать и рассчитать данные за последние 12 месяцев из таблицы - PullRequest
0 голосов
/ 08 января 2020

У меня есть таблица, которая содержит user, category и register_date, у меня есть требование, чтобы получить количество групп пользователей по месяцам и категориям за последние 12 месяцев.

user    register_date   category
a   1/7/2020    1
b   2/8/2020    1
c   1/9/2020    1
d   2/10/2020   2
e   1/11/2020   2
f   2/12/2020   2
g   2/13/2020   3
h   1/14/2020   3
e   1/11/2020   1
f   2/12/2020   1
g   2/13/2020   2
h   1/14/2020   3
e   1/11/2020   3
f   2/12/2020   1

Я пробовал что-то подобное. Я буквально перепутал с кодом ...

 @classmethod
def cont_user(cls):
    return cls.query(cls.user.count(), ).group_by(extract('year', cls.registerd_date),
         extract('month', cls.registered_date)).first(12)

вот так я его добиваюсь в MS SQL -> но мне нужно попасть в mysql с flask -sqlalchemy (это только для дать представление о требовании)

  SELECT count([UserName]) as user, DATENAME(month, [Registered_date]) + '-' +  CAST(YEAR([Registered_date]) AS nvarchar) as my, [category]

  FROM [database].[dbo].[user_table] group by [category], DATENAME(month, [Registered_date]) + '-' +  CAST(YEAR([Registered_date]) AS nvarchar)

Я уже ссылался на ссылки ниже, но не смог преобразовать в соответствии с моим требованием ...

Функция группировки по & count в sqlalchemy

MySQL получить количества за последние 12 месяцев, сгруппированные по месяцам

с ожидаемым результатом примерно так.

count   month-year  category
10  Jan-19  1
15  Jan-19  2
20  Jan-19  3
12  Feb-19  1
14  Feb-19  2
19  Feb-19  3
9   Mar-19  1
19  Mar-19  2
24  Mar-19  3

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

когда мы используем метод класса, нужно использовать with_entities .

спасибо за помощь ....

после некоторого эксперимента у меня сработал приведенный ниже код.

добавлено with_entities. также включены месяц и год, чтобы соответствовать моему выводу наверху.

from sqlalchemy import func

cls.query.with_entities(func.count(cls.user), cls.category, func.year(cls.registered_date), func.month(cls.registered_date))
    .group_by(func.year(cls.registered_date), func.month(cls.registered_date), cls.category)
    .limit(12).all()
0 голосов
/ 08 января 2020

Используйте sqlalchemy.func для создания собственных SQL выражений функций. YEAR() равно func.year, COUNT равно func.count и т. Д.

from sqlalchemy import func

cls.query(func.count(cls.user), cls.category)
    .group_by(func.year(cls.registered_date), func.month(cls.registered_date), cls.category)
    .limit(12).all()
...