zoukankan      html  css  js  c++  java
  • Group By 和Having总结

    1.Group By 概述

    “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组

    所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理.

    一般Group By是和聚合函数配合使用。Group By有一个原则,就是 select后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)


     2.Having 和Where的区别

    where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

    having子句被限制子已经在SELECT语句中定义的列和聚合表达式上

    比如显示每个地区的总人口数和总面积:

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region

    先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算

    显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region
    HAVING SUM(area)>1000000

    在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。相反,HAVING子句可以让我们筛选成组后的各组数据.

    ps:如果想根据sum后的字段进行排序可以在后面加上:order by sum(population) desc/asc


     3.实例

    示例1:

    select 类别, sum(数量) as 数量之和
    from A
    group by 类别

    返回结果如下表,实际上就是分类汇总

    示例2:

    select 类别, sum(数量) AS 数量之和
    from A
    group by 类别
    order by sum(数量) desc

    示例3:

    select 类别, sum(数量) as 数量之和 from A
    group by 类别
    having sum(数量) > 18

    示例4:

    select 类别, sum(数量) as 数量之和, 摘要
    from A
    group by 类别
    order by 类别 desc

    执行此SQL语句报错,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

  • 相关阅读:
    远程桌面下启动MATLAB时的License Manager Error -103错误
    自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】
    XeLaTeX中文模板
    MySQL Connector 卸载
    Anaconda更新源
    命令行远程重启服务器
    gnuplot画图中文标注相关问题
    CentOS 远程桌面相关服务安装笔记
    Windows下python2.7安装64位mysqlclient
    LaTeX 修订
  • 原文地址:https://www.cnblogs.com/hjhsysu/p/5729752.html
Copyright © 2011-2022 走看看