select item_id,buyer_id from(      select item_id,buyer_id,dense_rank() over(order by tot_amt desc) as ranking1,      dense_rank() over(partition by item_id order by amt desc) as ranking2 from (            select item_id, buyer_id,amt,sum(amt) over (partition by item_id order by amt ) as tot_amt             from A             where dt>=201807 and dt <=201809 and seller_id= 123) as a ) as b where b.ranking1 = 1 and b.ranking2=1; 我的方法是采用窗口函数,先计算每个item_id的总金额tot_amt,然后用dense_rank()分别对tot_amt、amt排序,再根据条件ranking=1,选择 item_id,buyer_id  ps:采用rank()函数是考虑到可能有销售总额相同的 item_id以及最高购买金额相同的buyer_id,若直接采用limit1来选择最大值可能导致选择的数据不全
点赞 3
牛客网
牛客企业服务