-2

各部門の上位 10 人の従業員を順番に一覧表示するにはどうすればよいですか? また、各部門の従業員は、購入の合計額に基づいて順序付けする必要があります。

これらはテーブルです:

CREATE TABLE EMP (
    EMPNO NUMBER(4),
    ENAME VARCHAR2(20),
    POSITION VARCHAR2(20),
    DEPTNO NUMBER(2)
);

CREATE TABLE DEPT (
    DEPTNO NUMBER(2),
    DNAME VARCHAR2(20)
);

CREATE TABLE CLIENT (
    CLIENTNO NUMBER(5),
    CNAME VARCHAR2(20),
    PHONE VARCHAR2(10)
);

CREATE TABLE PURCHASE (
    PURCHASENO  NUMBER(5),
    RECEIPTNO   NUMBER(6),
    SERVICETYPE VARCHAR2(25),
    PAYMENTTYPE VARCHAR2(10),
    GST     VARCHAR2(3),
    AMOUNT      NUMBER(4),
    SERVEDBY    NUMBER(4),
    CLIENTNO    NUMBER(5)
);

試みて編集された:

SELECT DISTINCT *
FROM (SELECT E.ENAME, D.DEPTNO, COUNT(P.PURCHASENO) AS TOTALAMOUNT,
             AVG(P.AMOUNT)AS AVGAMOUNT, MAX(P.AMOUNT)AS HIGHESTAMOUNT,
             SUM(P.AMOUNT)AS TOTALAMOUNTPURCHASE,
             DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY AMOUNT DESC)RANK
      FROM EMP E, DEPT D, PURCHASE P
     )
WHERE RANK<=10
4

1 に答える 1

0

この問題に対する 1 つのアプローチを次に示します。

 select *
 from (select s.deptno, empno,
              row_number() over (partition by s.deptno order by totamount desc) as seqnum
       from (select servedby, sum(amount) as totamount
             from purchase p
             group by servedby
            ) ps join
            emp e
            on ps.servedby = e.empno
       group by deptno, empno
      ) t
 where seqnum <= 10;

元のクエリには、テーブル間の結合と中間レベルの集計がありません。

于 2013-05-26T02:17:57.070 に答える