如何从表格中找到所有其他列的列的最小值和最大值

发布于 2025-02-06 23:55:45 字数 708 浏览 1 评论 0原文

如何获得最小(薪水)和最高(薪水)以及所有其他列,例如oracle SQL查询中的名称,DOB,电话号码...等。

我已经尝试了以下操作及其正常工作,但是是否有其他方法使用分析功能或类似功能。

SELECT
    a.*
FROM
         employees a
    JOIN (
        SELECT
            MIN(salary) min_sal,
            department_id
        FROM
            employees
        GROUP BY
            department_id
    ) b ON a.salary = min_sal
           AND a.department_id = b.department_id
UNION
SELECT
    a.*
FROM
         employees a
    JOIN (
        SELECT
            MAX(salary) max_sal,
            department_id
        FROM
            employees
        GROUP BY
            department_id
    ) b ON a.salary = max_sal
           AND a.department_id = b.department_id;

How to get MIN(salary) and MAX(salary) and all other columns such as name, DOB, phone number ...etc in oracle SQL query.

I have tried the following and its working fine but is there any other way using analytical functions or something like that .

SELECT
    a.*
FROM
         employees a
    JOIN (
        SELECT
            MIN(salary) min_sal,
            department_id
        FROM
            employees
        GROUP BY
            department_id
    ) b ON a.salary = min_sal
           AND a.department_id = b.department_id
UNION
SELECT
    a.*
FROM
         employees a
    JOIN (
        SELECT
            MAX(salary) max_sal,
            department_id
        FROM
            employees
        GROUP BY
            department_id
    ) b ON a.salary = max_sal
           AND a.department_id = b.department_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱娆 2025-02-13 23:55:45

我假设这样的东西(基于Scott的样本EMP表);查询每个部门的最低薪水和最高工资(这就是条款说的分区):

SQL> select deptno, empno, ename, job, sal,
  2    min(sal) over (partition by deptno) min_sal,
  3    max(sal) over (partition by deptno) max_sal
  4  from emp
  5  order by deptno, sal;

    DEPTNO      EMPNO ENAME      JOB              SAL    MIN_SAL    MAX_SAL
---------- ---------- ---------- --------- ---------- ---------- ----------
        10       7934 MILLER     CLERK           1495       1495       5750
        10       7782 CLARK      MANAGER         2818       1495       5750
        10       7839 KING       PRESIDENT       5750       1495       5750
        20       7369 SMITH      CLERK            920        920       3450
        20       7876 ADAMS      CLERK           1265        920       3450
        20       7566 JONES      MANAGER         3421        920       3450
        20       7788 SCOTT      ANALYST         3450        920       3450
        20       7902 FORD       ANALYST         3450        920       3450
        30       7900 JAMES      CLERK            998        998       2993
        30       7654 MARTIN     SALESMAN        1313        998       2993
        30       7521 WARD       SALESMAN        1313        998       2993
        30       7844 TURNER     SALESMAN        1575        998       2993
        30       7499 ALLEN      SALESMAN        1680        998       2993
        30       7698 BLAKE      MANAGER         2993        998       2993

14 rows selected.

SQL>

Something like this, I presume (based on Scott's sample emp table); query returns min and max salary per each department (that's what partition by clause says):

SQL> select deptno, empno, ename, job, sal,
  2    min(sal) over (partition by deptno) min_sal,
  3    max(sal) over (partition by deptno) max_sal
  4  from emp
  5  order by deptno, sal;

    DEPTNO      EMPNO ENAME      JOB              SAL    MIN_SAL    MAX_SAL
---------- ---------- ---------- --------- ---------- ---------- ----------
        10       7934 MILLER     CLERK           1495       1495       5750
        10       7782 CLARK      MANAGER         2818       1495       5750
        10       7839 KING       PRESIDENT       5750       1495       5750
        20       7369 SMITH      CLERK            920        920       3450
        20       7876 ADAMS      CLERK           1265        920       3450
        20       7566 JONES      MANAGER         3421        920       3450
        20       7788 SCOTT      ANALYST         3450        920       3450
        20       7902 FORD       ANALYST         3450        920       3450
        30       7900 JAMES      CLERK            998        998       2993
        30       7654 MARTIN     SALESMAN        1313        998       2993
        30       7521 WARD       SALESMAN        1313        998       2993
        30       7844 TURNER     SALESMAN        1575        998       2993
        30       7499 ALLEN      SALESMAN        1680        998       2993
        30       7698 BLAKE      MANAGER         2993        998       2993

14 rows selected.

SQL>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文