有下面表CREATE TABLE EPMUSER.ZH_EMP
(
  EMPLOYEE_ID  NUMBER                           NOT NULL,
  DEPT_NO      CHAR(2 BYTE),
  NAME         VARCHAR2(20 BYTE),
  SAL          NUMBER
)
现要求每个部门薪水最高人的信息。
下面是我写的SQLSELECT  A.EMPLOYEE_ID,
        A.NAME,
        A.DEPT_NO,
        A.SAL
  FROM  ZH_EMP A,
        (SELECT DEPT_NO,MAX(SAL) AS MAX_SAL
           FROM ZH_EMP 
         GROUP BY DEPT_NO) B
 WHERE  A.DEPT_NO = B.DEPT_NO
   AND  A.SAL = B.MAX_SAL;
感觉比较复杂,有更好的方法吗?
谢谢~~

解决方案 »

  1.   

    -- TRY IT
    SELECT EMPLOYEE_ID, NAME, DEPT_NO, SAL
      FROM (SELECT A.*,
                   ROW_NUMBER() OVER(PARTITION BY A.DEPT_NO ORDER BY A.SAL) RN
              FROM ZH_EMP A)
     WHERE RN = 1
      

  2.   

    少了排序 ORDER BY A.SAL DESC
      

  3.   


    谢谢你的回答。
    有2个问题。
    1).......ROW_NUMBER() OVER(PARTITION BY A.DEPT_NO ORDER BY A.SAL DESC.......
    2)如果有部门最高工资人有两个怎么办?
      

  4.   

    >2)如果有部门最高工资人有两个怎么办? 用rank函数也可以:SELECT EMPLOYEE_ID, NAME, DEPT_NO, SAL
      FROM (SELECT A.*,
                   max(sal) over(partition by dept_no) max_sal
              FROM ZH_EMP A)
     WHERE sal = max_sal