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条件显示特定的分组;
  • 相关阅读:
    虚拟机安装Mac OS X ----- VM12安装Mac OS X
    windows7 64位安装mysql 5.7.11 zip压缩版
    sublime text 3 + python配置,完整搭建及常用插件安装
    Windows下虚拟机安装Mac OS X ----- VM12安装Mac OS X 10.11
    myeclipse 2014新建maven web 项目步骤
    解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
    static{}语句块详解
    http状态码代表含义
    Android权限列表permission说明
    【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
  • 原文地址:https://www.cnblogs.com/giserxiaoliang/p/4630673.html
Copyright © 2011-2022 走看看