具有分组依据的Oracle分析功能

时间:2018-06-28 11:52:41

标签: oracle oracle11g oracle10g

通常,我们按部门名称进行分组,并找到最高和最低薪水。

True

但是我如何找到获得最高薪水和最低薪水的雇员的姓名。是否可以在单个sql语句中找到?

3 个答案:

答案 0 :(得分:1)

您可以使用FIRST函数:

["Item 1, Item 2", "Box 1, Box 2"]

请注意,如果您有不止一名雇员且工资相同,那么您只能得到其中一名。

根据您的要求,您也可以使用Pattern Matching

SELECT dept_name, SUM(salary), MAX(salary), MIN(salary),
    MAX(emp_name) KEEP (DENSE_RANK FIRST ORDER BY salary) AS Min_salary_emp,
    MAX(emp_name) KEEP (DENSE_RANK LAST ORDER BY salary) as  Max_salary_emp 
FROM emp 
GROUP BY dept_name;

答案 1 :(得分:0)

您可以在子查询的帮助下完成此操作:

select emp_name from employee where salary = (select max(salary) from employee) 
or salary = (select min(salary) from employee) ;

答案 2 :(得分:0)

您可以做类似的事情

WITH cteDepts as (select dept_name,
                         sum(salary) AS TOTAL_SALARY,
                         max(salary) AS MIN_SALARY,
                         min(salary) AS MAX_SALARY
                    from emp
                    group by dept_name)
SELECT d.*, emin.EMP_NAME, emax.EMP_NAME
  FROM cteDepts d
  INNER JOIN EMP emin
    ON emin.SALARY = d.MIN_SALARY
  INNER JOIN EMP emax
    ON emax.SALARY = d.MAX_SALARY

我不知道您的EMP表中的“雇员姓名”列是什么,因此我使用了EMP_NAME。如果列名与列名不同,则需要更改查询以使用正确的列名。

好运。