zoukankan      html  css  js  c++  java
  • [SQL入门级] 接上篇,继续查询

    距离上一篇时间隔得蛮久了,这篇继续查询,简单总结一下聚合函数、分组的知识。

    一、聚合函数(组函数/多行函数)

    何谓多行函数,顾名思义就是函数作用于多行数据得出一个输出结果,什么意思呢?看图:

    image

    那么常用的有哪些这样的函数呢?

    AVG(平均值)

    SUM(合计)

    COUNT(计数)

    MAX(最大值)

    MIN(最小值)

    STDDEV(标准差)

    组函数使用的语法,用法很简单,但有两点要注意:

    image

    I. 函数参数类型

    1. 数值型数据使用AVGSUM函数
    2. 任意数据类型的数据使用MIN、MAX、COUNT函数

    II. 有关空值的处理

    1. 首先组函数是忽略空值的,例如COUNT(*)返回的是表中所有的记录数,而COUNT(expr)返回的是expr字段不为空的记录数
    2. 那么怎样来处理空值呢,就要用到上一篇中提到的NVL函数,SELECT AVG(NVL(commission_pct,0)) FROM employees
    3. DISTINCT关键字表达的非空且不重复,COUNT(DISTINCT expr)返回的expr非空且不重复的记录数

    III. 不能在WHERE子句中使用组函数,这点结合后面的HAVING子句解释。

    IV. 组函数可以嵌套使用

    二、数据分组

    GROUP BY子句,分组数据

    意思咱就不废话了,用的时候注意两点:

    • SELECT后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面,反过来包含在GROUP BY子句的中的列却不必包含在SELECT列表中。
    • GROUP BY子句可以包含多个列,同意也适用规则1。

    有点晕,什么意思呢?我来解释一下,判断一个sql语句是否合法其实可以试着去理解你要写的sql语句要表达的实际想法,例如:

    • select department_id,job_id,avg(salary)
      from employees
      group by department_id,
      job_id

    image

    如上语句,我想要表达的意思是:从雇员这张表中求出不同部门和不同工种的人的平均工资,输出的格式是按照SELECT语句列表。那么如果我从SELECT列表中随便删掉一个字段,改变的只是我输出的格式,我还是按部门和工种进行分类了;但是如果只从GROUP

    BY子句中删掉job_id,则语句表达的意思就不能成立了,我按部门进行分组,但是部门中有很多个工种,结果到底要怎样对应不得而知。

    HAVING子句,过滤分组

    • WHERE子句的作用是筛选满足条件的数据行,即在分组之前过滤数据,条件中不能使用聚合函数;使用WHERE条件显示特定的行;
    • HAVING子句的作用是筛选满足条件的组,即在分组之后过滤分组,条件中经常包含聚合函数;使用HAVING条件显示特定的分组;
  • 相关阅读:
    WampServer Mysql配置
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 前10名
  • 原文地址:https://www.cnblogs.com/wayne-ivan/p/4667790.html
Copyright © 2011-2022 走看看