MySQL单表数据查询之分组数据查询之旅
MySQL单表数据查询之分组数据查询之旅
简单分组查询
实现统计功能分组查询
实现多个字段分组查询
1、创建数据库
create database check_group;
2、使用刚刚创建的数据库
use check_group;
3、创建表boluo
create table boluo( id int, name varchar(20), job varchar(20), brithday date, sal int, depno int);
查看表的定义信息
desc boluo;
此处添加照片7
4、插入数据
insert into boluo values(001,'菠萝吹雪','洗完工',1900-01-01,1787,10), (002,'梨花诗','收银员',1900-07-07,1987,10);
insert into boluo values(001,'陆小果','洗完工',1900-02-01,1787,20), (002,'橙留香','送货员',1900-09-07,1987,20);
insert into boluo values(001,'上官子怡','洗完工',1900-02-01,1787,30), (002,'天下无贼','售货员',1900-09-07,1987,30);
查看菠萝表所有的数据记录
select * from boluo;
执行完上面的命令后,发现2出错误
1、发现出错brithday写错了,修改为birthday
alter table boluo change brithday birthday varchar(20);
再次查看表的定义信息
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| job | varchar(20) | YES | | NULL | |
| birthday | varchar(20) | YES | | NULL | |
| sal | int(11) | YES | | NULL | |
| depno | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2、birthday数据没有成功插入,导致select为默认值
修改
update boluo set birthday="1900-01-01" where name='菠萝吹雪';update boluo set birthday="1900-07-07" where name='梨花诗';update boluo set birthday="1900-02-01" where name='陆小果';update boluo set birthday="1900-09-07" where name='橙留香';update boluo set birthday="1900-02-01" where name='上官子怡';update boluo set birthday="1900-09-07" where name='天下无贼';
========================
分组数据查询的意义:
对数据库具有基于表的特定列对数据进行分析处理
例如:可以对所有数据进行分组,然后对分组后的数据记录进行统计计算
分组用SQL语句GROUP BY实现,基本语法格式如下:
select function() from table_name where condition group by field;
field字段的要求:field字段上的值一定要有重复值,否则没有意义
执行SQL语句GROUP BY对所有数据进行分组
select * from table_name group by deptno;
实现统计功能分组查询
select group_concat(field) from table_name where condition group by field;
==========================================
5、分组数据查询----简单分组查询
select * from boluo group by depno;
查询结果:
+------+--------------+-----------+------------+------+-------+
| id | name | job | birthday | sal | depno |
+------+--------------+-----------+------------+------+-------+
| 1 | 菠萝吹雪 | 洗完工 | 1900-01-01 | 1787 | 10 |
| 1 | 陆小果 | 洗完工 | 1900-02-01 | 1787 | 20 |
| 1 | 上官子怡 | 洗完工 | 1900-02-01 | 1787 | 30 |
+------+--------------+-----------+------------+------+-------+
3 rows in set (0.00 sec)
解释:根据depno字段进行分组 从boluo表中查询所有的字段
只实现简单的分组查询是没有任何实际意义的,因为关键字group by单独使用时,默认查询出每个分组中随机记录一条,具有很大的不确定性。
6、分组数据查询—实现统计功能分组查询
select depno,group_concat(name) isname from boluo group by depno;
解释:根据depno分组,命名isname来存储显示name的字段,select 后面的depno字段,就仅仅是普通的查询而已
查询结果:
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| depno | isname |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| 10 | 菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗 |
| 20 | 陆小果,橙留香 |
| 30 | 上官子怡,天下无贼 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
select id,group_concat(name) isname from boluo group by depno;
查询结果:
+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| id | isname |
+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | 菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗,菠萝吹雪,梨花诗 |
| 1 | 陆小果,橙留香 |
| 1 | 上官子怡,天下无贼 |
+------+-------------------------------------------------------------------------------------------------------------------------------------------+
可以比较两条语句,能看到不同点的
7、分组数据查询----实现多个字段分组查询
select depno from boluo group by depno;
+-------+
| depno |
+-------+
| 10 |
| 20 |
| 30 |
+-------+
select depno,birthday from boluo group by depno,birthday;
+-------+------------+
| depno | birthday |
+-------+------------+
| 10 | 1900-01-01 |
| 10 | 1900-07-07 |
| 20 | 1900-02-01 |
| 20 | 1900-09-07 |
| 30 | 1900-02-01 |
| 30 | 1900-09-07 |
+-------+------------+
select depno,birthday,group_concat(name),count(name) from boluo group by depno,birthday;
+-------+------------+-------------------------------------------------------------------------------+-------------+
| depno | birthday | group_concat(name) | count(name) |
+-------+------------+-------------------------------------------------------------------------------+-------------+
| 10 | 1900-01-01 | 菠萝吹雪,菠萝吹雪,菠萝吹雪,菠萝吹雪,菠萝吹雪,菠萝吹雪 | 6 |
| 10 | 1900-07-07 | 梨花诗,梨花诗,梨花诗,梨花诗,梨花诗,梨花诗 | 6 |
| 20 | 1900-02-01 | 陆小果 | 1 |
| 20 | 1900-09-07 | 橙留香 | 1 |
| 30 | 1900-02-01 | 上官子怡 | 1 |
| 30 | 1900-09-07 | 天下无贼 | 1 |
+-------+------------+-------------------------------------------------------------------------------+-------------+
8、分组数据查询–实现having字句限定分组查询
在MySQL软件中如果想实现对分组进行条件限制,决不能通过关键字where来实现,因为该关键字主要用来实现条件限制数据记录。为解决上述问题,MySQL软件专门提供了关键字having来实现条件限制分组数据记录。
having关键字查询语法形式如下
select function(field) from table_name where condition group by field,field,field,...,fieldn having condition;
MySQL单表数据查询之分组数据查询之旅相关推荐
- MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...
- MySQL单表数据量过千万,采坑优化记录,完美解决方案
MySQL单表数据量过千万,采坑优化记录,完美解决方案 参考文章: (1)MySQL单表数据量过千万,采坑优化记录,完美解决方案 (2)https://www.cnblogs.com/ExMan/p/ ...
- mysql 单表数据_Mysql--单表数据记录查询
1.简单数据记录查询 1.1 简单数据查询 1.1.1 查询所有字段数据 例子: 1.1.2 "*"符号的使用 语法: 例子: 1.1.3 查询指定字段数据 例子: 1.2 避免重 ...
- mysql单表数据列_MySQL 之 数据操作及单表查询
1.数据操作 (1)insert 增加数据 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: ...
- “数据中台、读写分离、表分区”解决MySQL 单表数据量、并放量双高的效率瓶颈
需求情景:现有一数据库表,用于记录每一台设备的各种指标项数据,每台设备指标项约150个左右,共有10台设备(后期还会增加),每台设备每2秒写入1次数据,即:数据库单表每秒写入数据量=10台设备*150 ...
- MySQL单表数据量超1亿,根据 索引列 批量删除数据
我的场景:MySQL8有个表数据量超1亿,然后我要根据某个例(一对多)删除数据, 我直接用:delete from 表 where 字段 in (select 其他表) 条件用in的方式执行报 ...
- mysql 单表2000多万条数据,模糊查询如何秒回
mysql 单表数据2000多万,没有分区.没有表.没有分库,表存储的是企业信息,例如:企业名称.经营范围.注册地址等信息.现在需要通过关键词模糊匹配企业名称,搜索出匹配的数据.因为模糊匹配,所以直接 ...
- SQL查询单表数据之组合(三)
[SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...
- 数据库性能优化—MySQL单表最大记录数超过多少时性能会严重下降
以前没有想过MySQL数据库的单表最大行数,直到最近interview时被问到c语言中int类型的最大值是多少时才想到Mysql单表最大行数的问题. 一开始被问到C语言中int类型的最大值有点懵逼,一 ...
- MySQL单表最大记录数超过多少时性能会严重下降?
问题:MySQL单表最大记录数不能超过多少? 以前没有想过MySQL数据库的单表最大行数,直到最近interview时被问到c语言中int类型的最大值是多少时才想到Mysql单表最大行数的问题. 一开 ...
最新文章
- eclipse字体大小设置_Java 设置Excel单元格格式—基于Spire.Cloud.SDK for Java
- 使用css3实现瀑布流布局效果
- 简单的C语言程序合集-2
- 数据结构-使用两个栈实现一个队列
- 开源内容管理系统 php mysql_30 个很棒的PHP开源CMS内容管理系统小结
- Mysql中索引的 创建,查看,删除,修改
- 最新解决vscode中文乱码问题
- numpy: np.asarray 函数
- C语言12之什么是字符串类型?
- linux软路由关闭超线程,废掉硬路由,组建软路由的详细教程(图)
- 本学期在实验室的收获
- SIFT算法特征描述子构建---关键点定位原理及代码
- wps交叉表_WPS交叉引用的使用方法
- 教你解决线上频出MySQL死锁问题
- Warning: componentWillMount has been renamed, and is not recommended for use
- 来自http://blog.csdn.net/a837199685
- matlab语言及应用期末试卷,《MATLAB语言及应用》期末考试试题
- Java把xx年xx月xx日(星期x) 上午xx点xx分转换Date类型
- 程序无法启动因为计算机丢失msvcr110,解决启动Apache时出现因为计算机丢失MSVCR110.dll文件...
- Task02 几何变换