精华内容
下载资源
问答
  • 我们都知道,group by用法就是要按照自定的字段对数据集进行分组。 1.在Oracle,select子句的字段只能是分组名称或者是聚合函数,但MySQL中似乎在这方面放宽了很多。 (Oracle) (MySQL) 在MySQL中,就...

    我们都知道,group by 的用法就是要按照自定的字段对数据集进行分组。

    1.在Oracle中,select子句中的字段只能是分组名称或者是聚合函数,但MySQL中似乎在这方面放宽了很多。

    (Oracle)
    在这里插入图片描述
    (MySQL)
    在MySQL中,就没有像Oracle那样的严谨。居然都可以,太神奇了!
    在这里插入图片描述

    2.group by中还用having对结果集进行过滤。有点类似于where,但是并不是where。

    having适用于对结果集进行过滤。而where是对单个数据集进行过滤,也就是说。having是对分组以后的结果集进行过滤的,而where是用来从from中筛选指定的行,并且 where中绝对不能出现聚合函数无论是Oracle还是MySQL
    在这里插入图片描述
    在这里插入图片描述
    而having中却可以用聚合函数作为筛选条件
    在这里插入图片描述
    再配合上Order By 就能够达到排序的效果。
    最后简要的说明一下select语句执行的顺序:
    from -> where->group by->having->select->order by

    group by在最后,也就是对做完所有的查询、过滤之后的结果集进行排序,优先级从高到低。

    展开全文
  • MYSQL中GROUP BY用法

    2019-11-13 16:55:36
    GROUP BY用法非常多样化,也是MYSQL查询必备的技能之一。 定义 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组。GROUP BY 分组时,不限于一个字段,可以根据多...

    GROUP BY 的用法非常多样化,也是MYSQL查询必备的技能之一。

    定义

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组。GROUP BY 分组时,不限于一个字段,可以根据多个字段来分组,同时,GROUP BY还可以配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。

    常用聚合函数(aggregate function)
    count() 计数
    sum() 求和
    avg() 平均数
    max() 最大值
    min() 最小值

    语法

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE condition
    GROUP BY column_name;

    最简单的使用,查询某个字段直接group by分组查询,能起到去重的效果,类似于distinct

    例:SELECT  nick FROM user GROUP BY nick //根据昵称分组,查出所有学生不同的名字

    等同于SELECT  distinct('nick') FROM user   这两条sql查出来的结果一致

    通常的使用,一般都是联合聚合函数一起使用的比较多,比如分组查询,每个班级有多少学生

    例:SELECT  class_id,count(1) FROM user GROUP BY class_id,根据班级分组查询,每个班级有多少人

    SELECT  class_id,avg(score) FROM user GROUP BY class_id,subject ORDER BY class_id ASC,根据班级分组查询,查询一次考试每个班级每科的平均分数

    稍微复杂一点的使用,我们可以使用关联查询,或者having条件来辅助GROUP BY 做一些复杂条件的查询

    例:Having条件的使用

    SELECT nick,sum(score) AS total_score FROM exam WHERE `class` = '一年级一班' GROUP BY nick HAVING total_score > 160,查询一年级一班这次考试总分大于160的学生

    注:WHERE条件一定要写在GROUP BY前面;HAVING条件一定是跟聚合函数一起使用,且HAVING条件过滤的条件一定是使用聚合函数的字段;聚合函数的字段不能加单引号,否则会把字段当成字符串处理。

     

    展开全文
  • mysql中group by用法解析

    万次阅读 多人点赞 2017-05-22 11:05:15
    group by 与非聚合字段同时使用的结论解析

    1. group by的常规用法

    group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤。

    • 假设现有数据库表如下:
      表user_info,id主键,user_id唯一键
    CREATE TABLE `user_info` (
        `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
        `user_id` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户编号',
        `grade` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '年级',
        `class` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班级',
        PRIMARY KEY (`id`),
        UNIQUE INDEX `uniq_user_id` (`user_id`)
    )
    ENGINE=InnoDB
    • 数据
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (10, '10230', 'C', 'B');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (9, '10229', 'C', 'a');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (8, '10228', 'B', 'b');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (7, '10227', 'B', 'b');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (6, '10226', 'B', 'a');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (5, '10225', 'B', 'a');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (4, '10224', 'A', 'b');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (3, '10223', 'A', 'b');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (2, '10222', 'A', 'a');
    INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (1, '10221', 'A', 'a');
    
    
    iduser_idgradeclass
    110221Aa
    210222Aa
    310223Ab
    410224Ab
    510225Ba
    610226Ba
    710227Bb
    810228Bb
    910229Ca
    1010230Cb
    • 聚合函数max
    select max(user_id),grade from user_info group by grade ;

    结果

    max(user_id)grade
    10224A
    10228B
    10230C

    这条sql的含义很明确,将数据按照grade字段分组,查询每组最大的user_id以及当前组内容。注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

    • having
    select max(user_id),grade from user_info group by grade  having grade>'A'

    结果

    max(user_id)grade
    10228B
    10230C

    这条sql与上面例子中的基本相同,不过后面跟了having过滤条件。将grade不满足’>A’的过滤掉了。注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

    2. group by的非常规用法

    select max(user_id),id,grade from user_info group by grade  

    结果

    max(user_id)idgrade
    102241A
    102285B
    102309C

    这条sql的结果就值得讨论了,与上述例子不同的是,查询条件多了id一列。数据按照grade分组后,grade一列是相同的,max(user_id)按照数据进行计算也是唯一的,id一列是如何取值的?看上述的数据结果,
    推论:id是物理内存的第一个匹配项。
    究竟是与不是需要继续探讨。

    修改数据

    • 修改id按照上述数据结果,将id=1,改为id=99,执行sql后结论:
    max(user_id)idgrade
    102242A
    102285B
    102309C

    显然,与上述例子的结果不同。第一条数据id变成了99,查出的结果第一条数据的id从1变成了2。表明,id这个非聚合条件字段的取值与数据写入的时间无关,因为id=1的记录是先于id=2存在的,修改的数据不过是修改了这条数据的内容。结合mysql的数据存储理论,由于id是主键,所以数据在检索是是按照主键排序后进行过滤的,因此
    推论:id字段的选取是按照mysql存储的检索数据匹配的第一条
    将id改为1后恢复了原始结果,无法推翻上述推论。

    • 更改查询条件

      select max(user_id),user_id,id,grade from user_info group by grade
    max(user_id)user_ididgrade
    10224102211A
    10228102255B
    10230102299C

    将数据user_id改为10999后,执行结果为

    max(user_id)user_ididgrade
    10224109991A
    10228102255B
    10230102299C

    修改了user_id后,并没有改变查询到的数据条目,因此得出修改唯一键并不能影响查询匹配的条目规则,所以条目规则依然是匹配第一条,即id=1。

    结论

    • 当group by 与聚合函数配合使用时,功能为分组后计算
    • 当group by 与having配合使用时,功能为分组后过滤
    • 当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容。
    展开全文
  • MYSQL GROUP BY用法详解

    2020-09-09 23:28:46
    主要为大家详细介绍了MYSQL GROUP BY用法,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
  • 秒懂mysql中group by用法

    万次阅读 多人点赞 2019-06-06 18:13:23
    先来看下表1,表名为test: 执行如下SQL语句: SELECT name FROM test GROUP BY name 你应该很容易知道运行的结果,没...可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程...

    文章转载自:https://blog.csdn.net/u014717572/article/details/80687042

    先来看下表1,表名为test:
    表1
    执行如下SQL语句:

    SELECT name FROM test GROUP BY name
    

    你应该很容易知道运行的结果,没错,就是下表2:
    表2
    可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:

    1.FROM test:该句执行后,应该结果和表1一样,就是原来的表。

    2.FROM test Group BY name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面,如下图所示
    在这里插入图片描述
    3.接下来就要针对虚拟表3执行Select语句了:

    (1)如果执行select *的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,那么id跟number会返回各自单元格中的排序第一个值。id列会返回1,3,5

    (2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

    (3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如count(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。

    (4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:
    在这里插入图片描述
    5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组,如下图所示:
    在这里插入图片描述
    6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图:
    在这里插入图片描述

    展开全文
  • Mysql中group by、having、order by用法 group by用法(X字段、Y字段) group by X:将所有具有相同的X字段值的记录放到一个分组里。 group by X,Y:将所有具有相同X字段值和Y字段值的记录放到一个分组里。 先创建...
  • 我们可以看到GROUP BY 同时按照多个字段进行分组的时候,如果多个字段的分组查询都指定同一个查询结果的时候则采用该唯一的结果;否则group by将优先保证对跟在他后面的第一个字段进行分组查询,然后依照从前到后的...
  • 主要介绍了简单介绍MySQL中GROUP BY子句的使用,是MySQL入门学习的基础知识,需要的朋友可以参考下
  • mysql语句group by用法详解

    千次阅读 2019-05-21 15:02:42
    原文地址:... group bygroup by + group_concat()group by + 集合函数group by + havinggroup by + with rollup group by (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值...
  • mysql中group by分组查询我们经常会用到,并且还同时会与having合用,下面我介绍group by用法与having合用注意事项,希望此教程对各位朋友有所帮助
  • mysqlgroup by获取分组特定的一条记录在mysql5.7的问题
  • 最近学习SQL Server遇到了分组的问题,发现SQL Server的分组和MYSQL中的分组有不一样的地方,借此仔细的翻阅资料深入的学习了下。 就以案例来说明下: 学生成绩表(学好#,课程号,成绩) 我们开始按学号分组: ...
  • 关于mysql group by 用法总结

    千次阅读 2018-08-03 16:54:21
    group by 用法 select 聚合函数(分组字段) from table group by table.id having …… 当sql语句包含group by 时,select后的字段只能是聚合函数或者group by 后面的分组字段。如果需要条件筛选,则写在having...
  • mysql中group by having 用法需要注意的事项: GROUP BYgroup by 有一个原则,就是 select 后面的所有列,没有使用聚合函数的列,必须出现在 group by后面。 比如 select name,sum(point) from table_name 这样sql...
  • 本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...
  • 用法: 1.group by 列名(或是列数):按照指定的列属性进行分组。 2.group by 列名 with rollup:不仅可以按照指定的列属性进行分组,还可以完成分组后的聚合操作,以及对所用列的操作。 举一个实例:下面是一个工资...
  • GroupBy会默认按照分组的字段进行排序;如果不需要排序,可使用order by null 使用松散(Loose)索引扫描实现 GROUP BY MySQL 完全利用索引扫描来实现GROUP BY ,并不需要扫描所有满足条件的索引键即可完成操作得出...
  • 这是因为group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。 方法...
  • mysql筛选GROUP BY多个字段组合时的用法分享,需要的朋友可以参考下。
  • 主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作用法有很多相似之处,需要的朋友可以参考下
  • 常见mysql中group by 与 order by 一起使用排序问题group by排序方法一:先排序,在分组,使用子查询方法二:如果不需要取得整条记录,则可以使用 max() group by排序 假设有一个表:qipa_reward(奖励表),表结构...
  • MySQL数据库中group by语句与update语句的用法研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,589
精华内容 39,835
关键字:

mysql中groupby用法

mysql 订阅