1.MySQL数据库之GROUP BY的常规用法

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

聚合函数max

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

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

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

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

2. group by的非常规用法

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

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

修改数据

修改id按照上述数据结果,将id=1,改为id=99,执行sql后结论:

显然,与上述例子的结果不同。第一条数据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

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

  • 结论

    • 当group by 与聚合函数配合使用时,功能为分组后计算
    • 当group by 与having配合使用时,功能为分组后过滤
    • 当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容。
    • 如需了解更多测试技术信息请关注:深圳市多测师信息技术有限公司

MySQL数据库之GROUP BY用法相关推荐

  1. MySQL数据库以及其Python用法

    一 命令行模式下: mysql -u root -p # 进入进入mysql命令行模式 show databases; # 查看所有数据库 create database data; # 创建数据库, ...

  2. MySQL中 (GROUP BY 用法)和(ORDER BY用法)

    一.GROUP BY(分组) 例子: SELECT sum(id) as aa_id, max(id) as m_id, message FROM device_shadow_log GROUP BY ...

  3. mysql的groupby_MYSQL GROUP BY用法详解

    背景介绍 最近在设计数据库的时候因为开始考虑不周,所以产生了大量的重复数据.现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成.为了进一步了解这条语句的作用,我打算先从简单入手. ...

  4. mysql中show的用法_完全解析MySQL数据库中Show命令用法

    show命令的众多用法如下: a. show tables或show tables from database_name; - 显示当前数据库中所有表的名称. b. show databases; - ...

  5. mysql 数据库中数据去重,oracle数据库中如何达到像mysql数据库中group by 那种去重的效果..求大神解答...

    满意答案 oracle和mysql,group by是由区别的. oracle的gruop by 后跟的必须是select查询出的字段 而且group by语句中select指定的字段必须是" ...

  6. 秒懂mysql中的group by用法

    文章转载自:https://blog.csdn.net/u014717572/article/details/80687042 先来看下表1,表名为test: 执行如下SQL语句: SELECT na ...

  7. mysql数据库inner join_inner join用法是什么

    inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...

  8. mysql in从数据库取数_MySQL数据库中 where in 用法详解

    本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...

  9. mysql数据库缓存为多久_mysql数据库查询缓存总结

    概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...

最新文章

  1. JQuery移除事件
  2. ubuntu16.04 安装jdk
  3. css --- 行内框和内容区
  4. python工资管理系统课程设计_Python3实现的简单工资管理系统示例
  5. 第3章   IP寻址
  6. iOS开发之解析XML格式数据
  7. 解决Ubuntun 12.04编译 WARNING: 'automake1.12' is missing on your system
  8. 利用LVM管理磁盘系统
  9. 使用 jdbc 从数据库中查询数据
  10. 数据挖掘导论课后习题答案-第二章
  11. 【QT】QCustomPlot图表控件
  12. TS2769: No overload matches this call.
  13. uni-app自定义二维码扫描及本地图片扫描
  14. java 条件运算符_Java条件运算符
  15. bootstrap之背景图+文字
  16. 推荐一款美观的开源社区系统
  17. 《CSS实战案例汇总》涟漪
  18. 常用的html代码 加粗 加亮 字型加大 变色等
  19. 华为鸿蒙删除视频报错rm: local.mp4: Owner died
  20. Educational Codeforces Round 88 (Rated for Div. 2)C. Mixing Water(数学+二分法)---题解

热门文章

  1. 机房专用空调设备的安装
  2. 基于WiFi的网络授时时钟(带实时天气更新)设计——DIY方案分享
  3. 艺赛旗RPA开发金蝶ERP自动化流程的技巧
  4. js 中从JSON中取出某个属性的值
  5. Axure仿淘宝搜索原型
  6. 如何快速上手Mac电脑?mac新手教程 Mac电脑新手必看
  7. 错误:The Operation Couldn't be Completed
  8. 2020年淘宝年货销量数据监控可视化
  9. java resolve_Java Path resolve()用法及代码示例
  10. 大学最后一个学习的半年,Do crazily without hesitation