programing

그룹화 기준을 사용한 장고 SQL Windows 함수

closeapi 2023. 8. 14. 22:54
반응형

그룹화 기준을 사용한 장고 SQL Windows 함수

이 MariaDB 쿼리가 있습니다.

SELECT 
    DAYOFWEEK(date) AS `week_day`, 
    SUM(revenue)/SUM(SUM(revenue)) OVER () AS `rev_share` FROM orders
GROUP BY DAYOFWEEK(completed)

그러면 수익 점유율을 보여주는 표가 생성됩니다.

저의 목표는 장고의 ORM 레이어를 사용하여 동일한 것을 보관하는 것입니다.


RawSQL을 사용하여 다음을 시도했습니다.

share = Orders.objects.values(week_day=ExtractIsoWeekDay('date')) \
    .annotate(revenue_share=RawSQL('SUM(revenue)/SUM(SUM(revenue)) over ()'))

따라서 그룹화 기준이 없는 단일 값이 생성됩니다.실행되는 쿼리:

SELECT 
    WEEKDAY(`orders`.`date`) + 1 AS `week_day`,
    (SUM(revenue)/SUM(SUM(revenue)) over ()) AS `revenue_share`
FROM `orders`

또한 Window 기능을 사용하면 다음과 같습니다.

share = Orders.objects.values(week_day=ExtractIsoWeekDay('date')) \
    .annotate(revenue_share=Sum('revenue')/Window(Sum('revenue')))

그 결과 다음과 같은 쿼리가 발생합니다.

SELECT 
    WEEKDAY(`order`.`date`) + 1 AS `week_day`, 
    (SUM(`order`.`revenue`) / SUM(`order`.`revenue`) OVER ()) AS `rev_share` 
FROM `order` GROUP BY WEEKDAY(`order`.`date`) + 1 ORDER BY NULL

하지만 그 데이터는 완전히 틀렸습니다.창에서 테이블 전체를 사용하지 않는 것 같습니다.

미리 도와주셔서 감사합니다.

언급URL : https://stackoverflow.com/questions/64277046/django-sql-windows-function-with-group-by

반응형