programing

2개의 열이 있는 SQL:상위 3명의 사용자로부터의 커미션 및 커미션 합계

goodsources 2022. 9. 12. 11:54
반응형

2개의 열이 있는 SQL:상위 3명의 사용자로부터의 커미션 및 커미션 합계

데이터베이스에서 SQL 통계를 실행하려고 합니다.날짜, 사용자 ID, 금액으로 구성된 작업 목록을 가지고 있습니다.

그 결과, 3개의 컬럼을 가지고 싶다고 생각하고 있습니다.

  • 월(2020-01)
  • 매출합계(xxx.xx)
  • 이달 상위 3개 지출자의 매출 합계. (xxx.xx)

내가 지금까지 쓴 글과 내가 처한 상황은 다음과 같다.

SELECT DATE_FORMAT(`date_bill`, '%Y-%m') as money_month, SUM(`commission`) as 'Money' 
FROM `money` 
LEFT JOIN(
    SELECT SUM(`commission`) as value, DATE_FORMAT(`date_bill`, '%Y-%m') as top3_month 
    FROM `money` 
    WHERE DATE_FORMAT(`date_bill`, '%Y-%m') = money_month 
    GROUP BY `user_id` 
    ORDER BY VALUE DESC 
    LIMIT 3
) as Top3 
WHERE Top3.top3_month = money.money_month
GROUP BY DATE_FORMAT(`date_bill`, '%Y%m') 
ORDER BY money_month DESC

나는 지금 여기에 갇혀 있다.어디를 봐야 하는지, 무엇을 잘못하고 있는지에 대한 팁이 있나요?

MySQL/MariaDB 버전이 창 기능을 지원하는 경우 다음과 같은 두 가지 수준의 집약을 통해 이를 수행할 수 있습니다.

select
    mon,
    sum(com) total_commissions,
    sum(case when rn <= 3 then com end) top3_comissions
from (
    select 
        date_format(`date_bill`, '%Y-%m') mon,
        user_id,
        sum(commission) com,
        row_number() 
            over(partition by date_format(`date_bill`, '%Y-%m') order by sum(commission) desc) rn
    from money
    group by mon, user_id
) t
group by mon
order by mon

내부 쿼리는 사용자별 및 월별 커미션을 집계하고 각 사용자의 월별 매출에 순위를 할당합니다.외부 쿼리는 월별로 다시 집계되며 조건 합계를 사용하여 상위 3명의 사용자의 총 매출을 생성합니다.

상당히 복잡한 요구 사항입니다.

가입은 이런 거 아니에요.또한 GMB의 Answer가 작동하지 않았다고 합니다.

필요한 건

select left(date_bill, 7) as money_month, sum(commission) as money, money_top_3
 from money
 group by left(date_bill, 7)
 order by ... desc

money_top_3은 서브 쿼리가 있는 서브 쿼리에서 도달할 수 있습니다.

select sum(money) from
 (select left(date_bill, 7) as money_month, user_id, sum(commission) as money 
     from money tmoney
     where money_month= left(money.date_bill, 7)
     group by user_id
     order by money desc limit 3 ) subq

단, 서브쿼리의 절이 허용되고 서브쿼리의 내부가 아닌 date_bill of money 데이터베이스를 사용하는 경우에도 이 방법은 작동하지 않습니다.

임시 테이블로 두 번째 부분(다른 하위 테이블과 하위 쿼리)을 수행한 후 첫 번째 쿼리를 실행하여 임시 테이블과 결합하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/59874406/sql-with-2-columns-total-commission-and-commission-from-top-3-users

반응형