使用连接和 Over 子句结合 SQL 中的聚合值和非聚合值
先决条件–SQL 中的聚合函数、SQL 中的联接、 聚合函数对一组值执行计算并返回单个值。现在,考虑一个员工表 EMP 和一个部门表 DEPT,其结构如下:
表─员工表
| (full) name | 【无效】 | | | --- | --- | --- | | 【高龄】 | | [date] | | 【萨尔】 | |表─系表
型 | 【 name 】 | 【无效】 | | --- | --- |需要以下结果:
- 显示名称、SAL、EMP 的工作以及完成相同工作的 EMP 的最大、最小、AVG、总 SAL。
- 显示在其中工作的电磁脉冲数量的 DEPTNAME。
聚合值不能直接与非聚合值一起使用以获得结果。因此,可以使用以下概念:
1。使用连接–
- 创建包含聚合值结果的子表。
- 使用连接,使用子表的结果以非聚合值显示它们。
使用 JOIN 解决问题 1:
SELECT ENAME, SAL, EMP.JOB,
SUBTABLE.MAXSAL, SUBTABLE.MINSAL,
SUBTABLE.AVGSAL, SUBTABLE.SUMSAL
FROM EMP
INNER JOIN
(SELECT JOB, MAX(SAL) MAXSAL, MIN(SAL)
MINSAL, AVG(SAL) AVGSAL, SUM(SAL) SUMSAL
FROM EMP
GROUP BY JOB) SUBTABLE
ON EMP.JOB = SUBTABLE.JOB;
输出为样本数据:
T14】AvgSalT16】SumSalT20T28】3300T30】1920 T68 | Ename | Sal | homework | 马萨尔 | 最小数量 | | --- | --- | --- | --- | --- | | 斯科特 | Three thousand three hundred | 分析家 | Three thousand three hundred | 分析家 | Three thousand three hundred | One thousand nine hundred and twenty-five | Two thousand eight hundred and forty-one point six seven | Eight thousand five hundred and twenty-five | | 史密斯 | Three thousand three hundred | (轮船、飞机等上面的)全体工作人员 | Three thousand three hundred |2。使用“Over”子句–
- OVER 子句和 PARTITION BY 一起用于将数据分成多个分区。
- 特定功能对每个分区起作用。
使用 OVER 子句解决问题 2:
SELECT DISTINCT(DNAME),
COUNT(ENAME) OVER (PARTITION BY EMP.DEPTNO) EMP
FROM EMP
RIGHT OUTER JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
ORDER BY EMP DESC;
版权属于:月萌API www.moonapi.com,转载请注明出处