什么是多行函数?

多行函数又称组函数,通常是对一组数据的操作。

常用的组函数

  • SUM([DISTINCT|ALL] n)
  • AVG([DISTINCT|ALL]n)
  • COUNT(* [DISTINCT|ALL]c)
  • MAX([DISTINCT|ALL]c)
  • MIN([DISTINCT|ALL]c)

distinct 表示重复的值只计算一次。默认使用的是all

使用举例

SQL> --工资总额
SQL> select sum(sal) from emp;

  SUM(SAL)                                                                                                                                                                                              
----------                                                                                                                                                                                              
     29025                                                                                                                                                                                              

SQL> --人数
SQL> select count(*) from emp;

  COUNT(*)                                                                                                                                                                                              
----------                                                                                                                                                                                              
        14                                                                                                                                                                                              

SQL> --平均工资
SQL> select sum(sal)/count(*) 一,avg(sal) 二 from emp;

        一         二                                                                                                                                                                                   
---------- ----------                                                                                                                                                                                   
2073.21429 2073.21429                                                                                                       

SQL> select count(*), count(nvl(comm,0)) from emp;

  COUNT(*) COUNT(NVL(COMM,0))                                                                                                                                                                           
---------- ------------------                                                                                                                                                                           
        14                 14                                                                                                                                                                           

SQL> --null值 5. 组函数会自动滤空;可以嵌套滤空函数来屏蔽他的滤空功能

GROUP BY 分组函数

使用GROUP BY子句可将表中满足条件的记录按照指定的列划分成若干个小组,其中GROUP BY子句指定要分组的列

SQL> --每个部门的平均工资
SQL> select deptno,avg(sal)
 2  from emp
 3  group by deptno;

   DEPTNO   AVG(SAL)                                                                                                                                                                                   
---------- ----------                                                                                                                                                                                   
       30 1566.66667                                                                                                                                                                                   
       20       2175                                                                                                                                                                                   
       10 2916.66667 
				```

SQL> --多个列的分组 SQL> select deptno,job,sum(sal) 2 from emp 3 group by deptno,job 4 order by 1;

DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
    10 CLERK           1300                                                                                                                                                                         
    10 MANAGER         2450                                                                                                                                                                         
    10 PRESIDENT       5000                                                                                                                                                                         
    20 ANALYST         6000                                                                                                                                                                         
    20 CLERK           1900                                                                                                                                                                         
    20 MANAGER         2975                                                                                                                                                                         
    30 CLERK            950                                                                                                                                                                         
    30 MANAGER         2850                                                                                                                                                                         
    30 SALESMAN        5600    

SQL> --多个列的分组: 先按照第一个列分组,如果相同,再第二个列分组,以此类推

SQL> --过滤分组 having SQL> --查询平均工资大于2000的部门 SQL> select deptno,avg(sal) 2 from emp 3 group by deptno 4 having avg(sal) > 2000;

DEPTNO   AVG(SAL)                                                                                                                                                                                   
    20       2175                                                                                                                                                                                   
    10 2916.66667  

SQL> 过滤分组 where SQL> select deptno,avg(sal) 2 from emp 3 where deptno=10 4 group by deptno

DEPTNO   AVG(SAL)                                                                                                                                                                                   
    10 2916.66667   

--WHERE子句中不能使用分组函数,在HAVING子句中对数据组进行限制 --SQL优化 3. 尽量使用where

`注意:
在SELECT列表中除了分组函数那些项,所有列都必须包含在GROUP BY子句中
`
> SELECT语句执行过程
<1>通过FROM子句中找到需要查询的表
<2>通过WHERE子句进行非分组函数筛选判断
<3>通过GROUP BY子句完成分组操作
<4>通过HAVING子句完成组函数筛选操作
<5>通过SELECT子句选择显示的列或表达式及组函数
<6>通过ORDER BY子句进行排序操作
最后修改于 2019-05-21 22:38:00
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇