目录
Number相关函数
Group by+聚合函数
- group by函数将拥有同等的某列值的记录summary成一行记录,和聚合函数(count, min, max, avg, sum等)一起使用;
- 可以按照多个字段group by,比如group by ename, empno;
- group by后跟着的字段可以不出现在select语句里,比如SELECT avg(sal) FROM emp e GROUP BY deptno是可以的;
- 但select语句里不能有group by后没有的非聚合的列,比如SELECT ename, empno, avg(sal) FROM emp e GROUP BY ename(会报错,应为GROUP BY ename, empno)。
一个简单的例子:
SELECT deptno, min(sal) AS min_sal, max(sal) AS max_sal
FROM emp
GROUP BY deptno;
累计求和
内嵌一个标量子查询即可
-- 累计求和salary形成新的一列runningtotal
SELECT ename, e.sal,
(SELECT sum(d.sal) FROM emp d WHERE d.empno <= e.empno)running_total
FROM emp e;
累计乘积
通过对数求和再exp的方式,计算累计乘积。原理和累计求和一样,都是内嵌一个标量子查询。
-- 由于乘积太大,这里只看了deptno=10的几条记录的累计乘积
SELECT e.ename, e.sal,
(SELECT exp(sum(ln(d.sal))) FROM emp d WHERE d.empno <= e.empno AND d.deptno = e.deptno) running_prod
FROM emp e
WHERE e.deptno = 10;