分组统计

组函数:sum()、avg()、max()、min()、median()、stddev()、variance()、count()

单字段(用一个变量分组)
统计出每个部门的人数
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno ;

select 后面接的列和group by 后面接的列必须是一样的
除非select 后面加组函数,可以不放在group by后面

多字段(用多个变量分组)
查询出每个部门的详细信息
SELECT d.deptno,d.dname,d.loc,
NVL(COUNT(e.empno),0) count,NVL(ROUND(AVG(sal),2),0) avg,
NVL(SUM(sal),0) sum,NVL(MAX(sal),0) max,NVL(MIN(sal),0) min
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname,d.loc ;

group by 后面接多个变量,进行更为细致的分组统计
group by rollup(job) 进行合计
group by cube(job) 进行合计
分组之后的数据进行再次过滤需要用having语句

SQL语句执行流程:

  1. 执行FROM子句,确定要检索的数据来源。
  2. 执行WHERE子句,使用限定符对数据行进行过滤。
  3. 执行GROUP BY子句,根据指定字段进行分组。
  4. 执行HAVING子句,对分组后的统计数据进行过滤。
  5. 执行SELECT子句,确定要检索出的分组字段以及编写相应统计函数。
  6. 执行ORDER BY子句。

显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列
SELECT job , SUM(sal) sum FROM emp WHERE job<>‘SALESMAN’ GROUP BY job
HAVING SUM(sal)>5000 ORDER BY sum ASC ;

select empno,count() from myemp group by empno having count()>1; 查看重复数据

WHERE子句:在分组之前使用,表示从所有数据中筛选出部分数据
HAVING子句:在分组之后使用的,表示对分组统计后的数据执行再次过滤

猜你喜欢

转载自blog.csdn.net/bigdata_zx/article/details/83061196
今日推荐