zoukankan      html  css  js  c++  java
  • MySQL对数据表进行分组查询(GROUP BY)(转载自https://blog.csdn.net/q1054261752/article/details/48156177)

    MySQL对数据表进行分组查询(GROUP BY)

    GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组。基本的语法格式如下:

    GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP]
    • 属性名:是指按照该字段的值进行分组。
    • HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示。
    • WITH ROLLUP:将会在所有记录的最后加上一条记录。加上的这一条记录是上面所有记录的总和。

    GROUP BY关键字可以和GROUP_CONCAT()函数一起使用。GROUP_CONCAT()函数会把每个分组中指定的字段值都显示出来。

    同时,GROUP BY关键字通常与集合函数一起使用。集合函数包括COUNT()函数、SUM()函数、AVG()函数、MAX()函数和MIN()函数等。

    • COUNT()函数:用于统计记录的条数。
    • SUM()函数:用于计算字段的值的总和。
    • AVG()函数:用于计算字段的值的平均值。
    • MAX()函数:用于查询字段的最大值。
    • MIN()函数:用于查询字段的最小值。

    如果GROUP BY不与上述函数一起使用,那么查询结果就是字段取值的分组情况。字段中取值相同的记录为一组,但是只显示该组的第一条记录。


    单独使用GROUP BY关键字进行分组

    如果单独使用GROUP BY关键字,查询结果只显示一个分组的一条记录。

    实例:将employee表的sex字段进行分组查询,将查询结果与分组前的结果进行对比。操作步骤如下:

    1. 首先执行不带GROUP BY关键字的SELECT语句。如下图所示:

    执行不带GROUP BY关键字的SELECT语句

    上图中代码执行的结果显示的是employee表中原始的记录情况。

    2. 执行带有GROUP BY关键字的SELECT语句。代码如下:

    SELECT * FROM employee GROUP BY sex;

    在DOS提示符窗口中查看执行带有GROUP BY关键字的SELECT语句的操作效果。如下图所示:

    查看执行带有GROUP BY关键字的SELECT语句的操作效果

    上图中代码执行的结果只显示了两条记录。这两条记录的sex字段的值分别为“女”和“男”。

    查询结果进行比较,GROUP BY关键字只显示每个分组的一条记录。这说明,GROUP BY关键字单独使用时,只能查询出每个分组的一条记录,这样做的意义不大。因此,一般在使用集合函数时才使用GROUP BY关键字。


    GROUP BY关键字与GROUP_CONCAT()函数一起使用

    GROUP BY关键字与GROUP_CONCAT()函数一起使用时,每个分组中指定的字段值会全部显示出来。

    实例:将employee表按照sex字段进行分组查询。使用GROUP_CONCAT()函数将每个分组的name字段的值显示出来。

    SELECT语句的代码如下:

    SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex;

    在DOS提示符窗口中查看代码的执行效果。如下图所示:

    GROUP BY关键字与GROUP_CONCAT()函数一起使用的操作效果

    上图中代码执行的结果显示,查询结果分为两组。sex字段取值为“女”的记录是一组,取值为“男”的记录是一组。每一组中所有人的名字都被查询出来了。

    该实例说明,使用GROUP_CONCAT()函数可以很好的把分组情况表示出来。


    GROUP BY关键字与集合函数一起使用

    GROUP BY关键字与集合函数一起使用时,可以通过集合函数计算分组中的总记录、最大值、最小值等。

    实例:将employee表的sex字段进行分组查询。sex字段取值相同的为一组。然后对每一组使用集合函数COUNT()函数进行计算,求出每一组的记录数。

    SELECT语句的代码如下:

    SELECT sex,COUNT(sex) FROM employee GROUP BY sex;

    在DOS提示符窗口中查看GROUP BY关键字与集合函数一起使用的操作效果。如下图所示:

    查看GROUP BY关键字与集合函数一起使用的操作效果

    上图中代码执行的结果显示,查询结果按sex字段的取值进行分组。取值为“女”的记录为一组,取值为“男”的记录为一组。COUNT(sex)计算出了sex字段不同分组的记录数。第一组共有2条记录,第二组共有3条记录。

    提示

    通常情况下,GROUP BY关键字与集合函数一起使用,先使用GROUP BY关键字将记录分组,然后每组都使用集合函数进行计算。在统计时经常需要使用GROUP BY关键字和集合函数。


    GROUP BY关键字与HAVING一起使用

    使用GROUP BY关键字时,如果加上“HAVING 条件表达式”,则可以限制输出的结果。只有符合条件表达式的结果才会显示。

    实例:将employee表的sex字段进行分组查询。然后显示记录数大于等于3的分组。

    SELECT语句的代码如下:

    SELECT sex,COUNT(sex) FROM employee GROUP BY sex HAVING COUNT(sex)>=3;

    在DOS提示符窗口中查看GROUP BY关键字与HAVING一起使用的操作效果。如下图所示:

    查看GROUP BY关键字与HAVING一起使用的操作效果

    上图中代码执行的结果只显示了取值为“男”的记录的情况。因为,该分组的记录数为3,刚好符合HAVING COUNT(sex)>=3的条件。

    该实例说明,“HAVING 条件表达式”可以限制查询结果的显示情况。

    提示

    “HAVING 条件表达式”与“WHERE 条件表达式”都是用于限制显示的。但是,两者起作用的地方不一样。

    • WHERE 条件表达式:作用于表或者视图,是表和视图的查询条件。
    • HAVING 条件表达式:作用于分组后的记录,用于选择符合条件的组。

    按照多个字段进行分组

    在MySQL中,还可以按照多个字段进行分组。例如,employee表按照d_id字段和sex字段进行分组。分组过程中,先按照d_id字段进行分组,遇到d_id字段的值相等的情况时,再把d_id值相等的记录按照sex字段进行分组。

    实例:将employee表按照d_id字段和sex字段进行分组。

    SELECT语句的代码如下:

    SELECT * FROM employee GROUP BY d_id,sex;

    在DOS提示符窗口中查看按照多个字段进行分组的操作效果。如下图所示:

    查看按照多个字段进行分组的操作效果

    上图中代码执行的结果显示,记录先按照d_id字段进行分组,因为分别有两条记录的d_id的值为1001和1004,所以这4条记录再次按照sex字段的取值进行了分组。


    GROUP BY关键字与WITH ROLLUP一起使用

    使用WITH ROLLUP时,将会在所有记录的最后加上一条记录。这条记录是上面所有记录的总和。

    实例:将employee表的sex字段进行分组查询。使用COUNT()函数计算每组的记录数,并且加上WITH ROLLUP。

    SELECT语句的代码如下:

    SELECT sex,COUNT(sex) FROM employee GROUP BY sex WITH ROLLUP;

    在DOS提示符窗口中查看GROUP BY关键字与WITH ROLLUP一起使用的操作效果。如下图所示:

    查看GROUP BY关键字与WITH ROLLUP一起使用的操作效果

    上图中代码执行的结果显示,计算出了各个分组的记录数,并且,在记录的最后加上了一条新的记录。该记录的COUNT(sex)列的值正好是上面分组的值的总和。

    实例:将employee表的sex字段进行分组查询。使用GROUP_CONCAT()函数查看每组的name字段的值,并且加上WITH ROLLUP。

    SELECT语句的代码如下:

    SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex WITH ROLLUP;

    在DOS提示符窗口中查看SELECT语句WITH ROLLUP参数的操作效果。如下图所示:

    查看SELECT语句WITH ROLLUP参数的操作效果

    上图中代码执行的结果显示,GROUP_CONCAT(name)显示了每个分组的name字段的值。同时,最后一条记录的GROUP_CONCAT(name)列的值正好是上面分组name取值的总和。

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/sw-3/p/10370016.html
Copyright © 2011-2022 走看看