Почему выражение при аннотации переходит в group by в Django ORM

делаю запрос,

result = (clients
          .values_list(Sum('summa') / kek)
          )

Результат:

ProgrammingError: (1111, 'Invalid use of group function')

А сам sql выход такой:

SELECT
    (
    SUM( `crm_orderhistory`.`summa` ) / COUNT( DISTINCT `crm_orderhistory`.`order_date`, `crm_orderhistory`.`client_id` )) AS `combinedexpression1` 
FROM
    `crm_orderhistory` 
WHERE
    ( `crm_orderhistory`.`order_date` >= "2022-01-18" AND `crm_orderhistory`.`order_date` <= "2023-01-20" ) 
GROUP BY
    EXTRACT( MONTH FROM `crm_orderhistory`.`order_date` ),
    COUNT(
    DISTINCT `crm_orderhistory`.`order_date`,
    `crm_orderhistory`.`client_id`)

Сюда зачем-то в GROUP BY падает то, что должно быть ТОЛЬКО в SELECT

вот clients

SELECT
    EXTRACT( MONTH FROM `crm_orderhistory`.`order_date` ) AS `month` 
FROM
    `crm_orderhistory` 
WHERE
    ( `crm_orderhistory`.`order_date` >= "2022-01-18" AND `crm_orderhistory`.`order_date` <= "2023-01-20" ) 
ORDER BY
    `crm_orderhistory`.`order_date` DESC

В clients не показывается GROUP BY который с order_date идет, но это неважно, главный вопрос, почему то что пошло в SELECT пошло и в GROUP BY, я про COUNT

переменная kek это самописаня функция для sql, вот её код:

class CustomCount(Func):
    function = 'COUNT'
    arg_joiner = ', '
    template = "%(function)s(DISTINCT %(expressions)s)"
    output_field = IntegerField()

Вот весь код представленный выше, только без обрезок:

class CustomCount(Func):
    function = 'COUNT'
    arg_joiner = ', '
    template = "%(function)s(DISTINCT %(expressions)s)"
    output_field = IntegerField()


@handle_data_for_chart
def get_average_receipt(clients: QuerySet[OrderHistory]):

    kek = CustomCount('order_date', 'client')

    result = (clients
              .values_list(Sum('summa') / kek)
              )
 
    return result

Декоратор handle_data_for_chart обрабатывает предварительно данные, кинул их они получаются в ссылке client но это тоже не важно.

Главный вопрос продублирую:

главный вопрос, почему то что пошло в SELECT пошло и в GROUP BY, я про COUNT

Вернуться на верх