Be alaways javaing...

Loving Java
posts - 43, comments - 5, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
1.   select * from emp;

    EMPNO ENAME  JOB        MGR HIREDATE     SAL COMM  DEPTNO
    ----- ------ --------- ---- ----------- ---- ---- -------
     7369 SMITH  CLERK     7902 17-DEC-1980  800           20
     7499 ALLEN  SALESMAN  7698 20-FEB-1981 1600  300      30
     7521 WARD   SALESMAN  7698 22-FEB-1981 1250  500      30
     7566 JONES  MANAGER   7839 02-APR-1981 2975           20
     7654 MARTIN SALESMAN  7698 28-SEP-1981 1250 1400      30
     7698 BLAKE  MANAGER   7839 01-MAY-1981 2850           30
     7782 CLARK  MANAGER   7839 09-JUN-1981 2450           10
     7788 SCOTT  ANALYST   7566 09-DEC-1982 3000           20
     7839 KING   PRESIDENT      17-NOV-1981 5000           10
     7844 TURNER SALESMAN  7698 08-SEP-1981 1500    0      30
     7876 ADAMS  CLERK     7788 12-JAN-1983 1100           20
     7900 JAMES  CLERK     7698 03-DEC-1981  950           30
     7902 FORD   ANALYST   7566 03-DEC-1981 3000           20
     7934 MILLER CLERK     7782 23-JAN-1982 1300           10

2.问题:查找DEPTNO 20中出现最多次数的工资?
 select sal
      from emp
     where deptno = 20
     order by sal

           SAL
    ----------
           800
          1100
          2975
          3000
          3000

3.解决方案
使用窗口函数 DENSE_RANK,把工资重复出现的次数分等级。
  1     select sal
  2       from (
  3     select sal,
  4            dense_rank()over( order by cnt desc) as rnk
  5       from (
  6     select sal, count(*) as cnt
  8       from emp
  9      where deptno = 20
 10      group by sal
 11            ) x
 12            ) y
 13      where rnk = 1 

只有注册用户登录后才能发表评论。


网站导航: