sql - 在单个查询中显示来自 emp 和 dept 表的统计信息
问题描述
我有两个表 emp 和 dept
Emp 表有以下字段:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
Dept 表有以下字段:
DEPTNO DNAME LOC
规则是:- a。每个部门的员工总数 B. 各部门最高工资 C. 每个部门的最低工资。d。每个部门薪水最高的雇员人数。e. 每个部门薪水最低的雇员人数。F。每个部门薪水最高的员工姓名/身份证。G。每个部门薪水最低的员工姓名/身份证。H。属于每个部门的所有员工的姓名。
有关 emp 和 dept 表的数据,请参阅此链接
http://sqlfiddle.com/#!4/1bc2b8
提前致谢..
解决方案
您可以使用analytical function
和GROUP BY
如下:
SELECT D.deptno,
COUNT(1) TOTAL_EMPS,
MAX(sal) AS MAX_SAL,
MIN(sal) AS MIN_SAL,
SUM(CASE WHEN SAL = MINSAL THEN 1 END) EMP_MIN_SAL,
SUM(CASE WHEN SAL = MAXSAL THEN 1 END) EMP_MAX_SAL,
MAX(CASE WHEN RNMIN = 1 THEN E.empno END) EMP_WITH_MIN_sAL,
MAX(CASE WHEN RNMAX = 1 THEN E.empno END) EMP_WITH_MAX_sAL,
LISTAGG(E.ename, ',') WITHIN GROUP (ORDER BY E.EMPNO) ALL_EMPS
FROM dept D JOIN (SELECT T.*,
MIN(SAL) OVER (PARTITION BY deptno) MINSAL,
MAX(SAL) OVER (PARTITION BY deptno) MAXSAL,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY SAL) RNMIN,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY SAL DESC) RNMAX
FROM emp T) E
ON E.deptno = D.deptno
GROUP BY D.deptno;
推荐阅读
- git - 如何总结用户在 git 中所做的更改?
- c# - 如何在 XUnitTest 中处理 Yes No DisplayAlert?
- node.js - 从 NodeJS 错误调用基于 Jax-ws SOAP 的 Web 服务
- java - google ortools - 从一组数据中排除零并计算出平方偏差
- php - 如何使用复选框使用 HTML、CSS 正确处理 PHP 表单(URL)?
- javascript - 是否可以在标签中使用图像映射?
- sql-server - T-SQL 中 WHERE 子句中的 CASE
- bash - 在 shell 脚本中,如何正确转义双引号,以便可以使用带引号的参数运行命令?
- java - java.security.NoSuchAlgorithmException:(算法:默认,提供者:SunJSSE,类:sun.security.ssl.SSLContextImpl$DefaultSSLContext)
- react-native - React-native-fs 报告成功,但似乎失败,因为没有写入文件