MySQL数据库之GROUP BY用法
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用法相关推荐
- MySQL数据库以及其Python用法
一 命令行模式下: mysql -u root -p # 进入进入mysql命令行模式 show databases; # 查看所有数据库 create database data; # 创建数据库, ...
- 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 ...
- mysql的groupby_MYSQL GROUP BY用法详解
背景介绍 最近在设计数据库的时候因为开始考虑不周,所以产生了大量的重复数据.现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成.为了进一步了解这条语句的作用,我打算先从简单入手. ...
- mysql中show的用法_完全解析MySQL数据库中Show命令用法
show命令的众多用法如下: a. show tables或show tables from database_name; - 显示当前数据库中所有表的名称. b. show databases; - ...
- mysql 数据库中数据去重,oracle数据库中如何达到像mysql数据库中group by 那种去重的效果..求大神解答...
满意答案 oracle和mysql,group by是由区别的. oracle的gruop by 后跟的必须是select查询出的字段 而且group by语句中select指定的字段必须是" ...
- 秒懂mysql中的group by用法
文章转载自:https://blog.csdn.net/u014717572/article/details/80687042 先来看下表1,表名为test: 执行如下SQL语句: SELECT na ...
- mysql数据库inner join_inner join用法是什么
inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...
- mysql in从数据库取数_MySQL数据库中 where in 用法详解
本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...
- mysql数据库缓存为多久_mysql数据库查询缓存总结
概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...
最新文章
- JQuery移除事件
- ubuntu16.04 安装jdk
- css --- 行内框和内容区
- python工资管理系统课程设计_Python3实现的简单工资管理系统示例
- 第3章 IP寻址
- iOS开发之解析XML格式数据
- 解决Ubuntun 12.04编译 WARNING: 'automake1.12' is missing on your system
- 利用LVM管理磁盘系统
- 使用 jdbc 从数据库中查询数据
- 数据挖掘导论课后习题答案-第二章
- 【QT】QCustomPlot图表控件
- TS2769: No overload matches this call.
- uni-app自定义二维码扫描及本地图片扫描
- java 条件运算符_Java条件运算符
- bootstrap之背景图+文字
- 推荐一款美观的开源社区系统
- 《CSS实战案例汇总》涟漪
- 常用的html代码 加粗 加亮 字型加大 变色等
- 华为鸿蒙删除视频报错rm: local.mp4: Owner died
- Educational Codeforces Round 88 (Rated for Div. 2)C. Mixing Water(数学+二分法)---题解
热门文章
- 机房专用空调设备的安装
- 基于WiFi的网络授时时钟(带实时天气更新)设计——DIY方案分享
- 艺赛旗RPA开发金蝶ERP自动化流程的技巧
- js 中从JSON中取出某个属性的值
- Axure仿淘宝搜索原型
- 如何快速上手Mac电脑?mac新手教程 Mac电脑新手必看
- 错误:The Operation Couldn't be Completed
- 2020年淘宝年货销量数据监控可视化
- java resolve_Java Path resolve()用法及代码示例
- 大学最后一个学习的半年,Do crazily without hesitation