不使用分析函数计算每个月每种车型销售前3的行
create view test_sale as select '2019-01' as order_date,'A' as brand_id ,10 as cnt from dual union all select '2019-01' as order_date,'B' as brand_id ,20 as cnt from dual union all select '2019-01' as order_date,'C' as brand_id ,30 as cnt from dual union all select '2019-01' as order_date,'D' as brand_id ,15 as cnt from dual union all select '2019-01' as order_date,'E' as brand_id ,22 as cnt from dual union all select '2019-02' as order_date,'A' as brand_id ,10 as cnt from dual union all select '2019-02' as order_date,'B' as brand_id ,30 as cnt from dual union all select '2019-02' as order_date,'C' as brand_id ,30 as cnt from dual union all select '2019-02' as order_date,'D' as brand_id ,15 as cnt from dual union all select '2019-02' as order_date,'E' as brand_id ,22 as cnt from dual ;
自关联,使用月份关联,关联后,匹配当前月销售量比本车型销售量大的数据。
汇总后,行数最少的,就是销售量最多的。
SELECT A.ORDER_DATE, A.BRAND_ID, A.CNT, COUNT(*) AS RN FROM TEST_SALE A JOIN TEST_SALE B ON A.ORDER_DATE = B.ORDER_DATE AND A.CNT <= B.CNT GROUP BY A.ORDER_DATE, A.BRAND_ID, A.CNT;