对MAX出现次数执行COUNT

时间:2016-09-14 15:26:58

标签: sql oracle count max aggregate

我的情况是,A人每年都可以销售产品A.根据这些信息,我必须计算他们在当月销售大部分产品A的月份。

如果他们在1月份销售10件产品,在8月份和10月10日销售6件,我会把最新月份的信息(在这种情况下是10月份)。

但是,我想要包含某种跟踪器,该跟踪器会说明当年的当前MAX是否已在年初的某个时间点与人A相等,我想计算出现的数量。如果A人继续在Novemeber卖15,那么柜台应该重新启动。

当前数据=

EMP         PRODUCT           MONTH         VOLUME
---------------------------------------------------
A            A                 1             10
A            A                 8             6
A            A                 10            10

AIM =

EMP         PRODUCT           MAX(VOLUME)    COUNT
---------------------------------------------------
A             A                    10           2

关于解决此问题的最有效方法的任何建议都会很棒!

1 个答案:

答案 0 :(得分:1)

CREATE TABLE MY_TABLE (EMP VARCHAR2(10), PRODUCT VARCHAR2(10), MONTH NUMBER, VOLUME NUMBER);

INSERT INTO MY_TABLE VALUES ('A', 'A', 1, 10);
INSERT INTO MY_TABLE VALUES ('A', 'A', 8, 6);
INSERT INTO MY_TABLE VALUES ('A', 'A', 10, 10);

COMMIT;

--EMP         PRODUCT           MONTH         VOLUME
-----------------------------------------------------
--A            A                 1             10
--A            A                 8             6
--A            A                 10            10



SELECT EMP,
       PRODUCT,
       VOLUME,
       MY_COUNT
  FROM (  SELECT EMP,
                 PRODUCT,
                 VOLUME,
                 COUNT (MY_RANK) MY_COUNT,
                 RANK () OVER (PARTITION BY EMP, PRODUCT ORDER BY VOLUME DESC)
                    MY_SECOND_RANK
            FROM (SELECT EMP,
                         PRODUCT,
                         volume,
                         RANK ()
                            OVER (PARTITION BY EMP, PRODUCT
                                  ORDER BY VOLUME DESC, MONTH DESC)
                            MY_RANK
                    FROM MY_TABLE)
        GROUP BY EMP, PRODUCT, VOLUME)
 WHERE MY_SECOND_RANK = 1;