zoukankan      html  css  js  c++  java
  • 求列最高薪水5人及其他的SQL写法.

    求列最高薪水5人及其他的SQL写法.

    有表emp:
    name       sal
    ---------------
    SMITH        800
    ALLEN        1600
    WARD        1250
    JONES        2975
    MARTIN        1250
    BLAKE        2850
    CLARK        2450
    SCOTT        3000
    KING        5000
    TURNER        1500
    ADAMS        1100
    JAMES        950
    FORD        3000
    MILLER        1300
    求一窗口函数能出以下结果:
    name        sal           order
    ----------------------------------
    KING        5000        1
    SCOTT        3000        2
    FORD        3000        3
    JONES        2975        4
    BLAKE        2850        5
    other        12200        6
    意思是,取sal最高的前五名,并把剩下的sal求和作为第六名.

    虽然只用到了两列,为了省事就全导出来吧

    create table EMP
    (
      EMPNO    NUMBER,
      ENAME    VARCHAR2(10),
      JOB      VARCHAR2(10),
      MGR      NUMBER,
      HIREDATE DATE,
      SAL      NUMBER,
      COMM     NUMBER,
      DEPTNO   NUMBER
    )
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('29-09-1981', 'dd-mm-yyyy'), 1250, 1400, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450, null, 10);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7788, 'SCOTT', 'ANALYST', 7566, to_date('09-12-1982', 'dd-mm-yyyy'), 3000, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 10);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7876, 'ADAMS', 'CLERK', 7788, to_date('12-01-1983', 'dd-mm-yyyy'), 1100, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);
    insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);
    commit;
    Solution:
    SELECT DECODE(SIGN(s - 6), -1, ename, 'other') ename,
           DECODE(SIGN(s - 6), -1, s, 6) s,
           SUM(sal) sal
    FROM   (SELECT a.*, row_number() OVER(ORDER BY sal DESC,empno) s FROM emp a )
    GROUP  BY DECODE(SIGN(s - 6), -1, ename, 'other'),
              DECODE(SIGN(s - 6), -1, s, 6)
    ORDER  BY 2;
    SQL>

    ENAME               S        SAL
    ---------- ---------- ----------
    KING                1       5000
    SCOTT               2       3000
    FORD                3       3000
    JONES               4       2975
    BLAKE               5       2850
    other               6      12200
     
    魔兽就是毒瘤,大家千万不要玩。
  • 相关阅读:
    sql 计算auc
    tf.app.flags
    transformer
    python 直连 hive
    rnn 详解
    yolov3
    记学习react-native
    html5横、竖屏状态 以及禁止横屏
    图片懒加载
    npm安装的时候报-4048
  • 原文地址:https://www.cnblogs.com/tracy/p/1712440.html
Copyright © 2011-2022 走看看