MySQL最有用的一项功能就是,能够对大量原始数据进行归纳统计。

1.在一组值里把各个唯一的值找出来,这是一项典型的统计工作,可以使用DISTINCT 关键字清楚查询结果里重复出现的行。例如,下面的查询可以查看 student 表里所有的性别:

mysql> SELECT DISTINCT sex FROM student;
+-----+
| sex |
+-----+
| M |
| F |
+-----+
rows in set (0.00 sec)

2. 另一种统计形式是计数,需要使用COUNT()函数。如果使用 COUNT(*),那么计算出来的结果将是查询所选取到的行数。如果查询语句没有带 WHERE 子句,那么它会查询所有行,因此,COUNT(*) 计算出来的结果就是表的行数。

(i)下面这个查询可以显示出 student 表里有多少行:

mysql> SELECT COUNT(*) FROM student;
+----------+
| COUNT(*) |
+----------+
| |
+----------+
row in set (0.00 sec)

(ii)下面这个查询可以查看 student 表里有多少不同的性别:

mysql> SELECT COUNT(DISTINCT sex) FROM student;
+---------------------+
| COUNT(DISTINCT sex) |
+---------------------+
| |
+---------------------+
row in set (0.00 sec)

(iii)如果查询语句带有 WHERE 子句,那么COUNT(*) 计算出来的结果就是该语句匹配到了多少行。下面这个查询可以显示出 student 表中有多少 Female:

mysql> SELECT COUNT(*) FROM student WHERE sex='F';
+----------+
| COUNT(*) |
+----------+
| |
+----------+
row in set (0.00 sec)

(iv)COUNT(*) 函数会统计所有被查询到的行数,与之相对的是,COUNT(列名)只会统计所有非NULL值的数目。下面这个查询展示了这两个函数的区别:

mysql> SELECT COUNT(DISTINCT sex) ,COUNT(name),COUNT(student_id) FROM student;
+---------------------+-------------+-------------------+
| COUNT(DISTINCT sex) | COUNT(name) | COUNT(student_id) |
+---------------------+-------------+-------------------+
| | | |
+---------------------+-------------+-------------------+
row in set (0.00 sec)

(v)另外,还可以使用 GROUP BY 语句分别统计男、女学生的人数:

mysql> SELECT sex , COUNT(*) FROM student GROUP BY sex;
+-----+----------+
| sex | COUNT(*) |
+-----+----------+
| F | |
| M | |
+-----+----------+
rows in set (0.00 sec)

(vi) 如果不是想用LIMIT子句来限制查询结果中的记录条数,而是想把COUNT() 的某些特定值找出来,那么需要用到HAVING子句。该子句与WHERE相类似,他们都可以用来设定输出行所必须满足的查询条件。与WHERE子句不同的是,它可以引用像COUNT()那样的汇总函数输出的结果。下面的查询显示了 student 表中个数超过3个的那种性别:

mysql> SELECT sex,COUNT(*) AS count FROM student
-> GROUP BY sex HAVING count> ORDER BY count DESC;
+-----+-------+
| sex | count |
+-----+-------+
| M | |
+-----+-------+
row in set (0.00 sec)

一般情况下,带有HAVING子句的查询语句,特别适合于查找在某个数据列里重复出现的值。也可以用于查找不重复出现的值,此时使用 HAVING count=1 即可。

  

(vii)  除了 COUNT() 外,还有其他几个汇总函数,函数 MIN()、MAX()、SUM()和 AVG() 可分别用于确定某个数据列的最小值、最大值、总计和平均值。甚至可以在同一个查询语句里使用它们。下面这个查询可以显示了这几个函数的用法:

mysql> SELECT
-> MIN(student_id) as minimum,
-> MAX(student_id) as maximum,
-> MAX(student_id)- MIN(student_id) + as span,
-> SUM(student_id) as total,
-> AVG(student_id) as average,
-> COUNT(student_id) as count
-> FROM student;
+---------+---------+------+-------+---------+-------+
| minimum | maximum | span | total | average | count |
+---------+---------+------+-------+---------+-------+
| | | | | 3.5000 | |
+---------+---------+------+-------+---------+-------+
row in set (0.00 sec)

(viii) 如果想要生成额外的输出行,显示出"统计结果的统计",那么还需要增加一条 WITH ROLLUP 子句。它会让 MySQL 计算各分组行的“超集”值。如下实例:

mysql> SELECT sex , count(*) as count FROM student GROUP BY sex WITH ROLLUP;
+-----+-------+
| sex | count |
+-----+-------+
| F | |
| M | |
| NULL | |
+-----+-------+
rows in set (0.00 sec)

分组列里的NULL表明,相应的计数结果就是其前面那些分组统计的汇总值。

  

MySQL数据库(4)----生成统计信息的更多相关文章

  1. MySQL 8.0 中统计信息直方图的尝试

    直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据在MySQL 8.0之前的版本中,My ...

  2. SQL Server 数据库表的统计信息的更新

             最近在调整基础信息数据时,新增了几个客户类型,意想不到的事情发生了,在使用新增的客户类型作为 查询条件查询报表时,居然出现了超时的现象,但是用其他以前的客户类型查询就没有问题,用一个 ...

  3. Entity Framework连接Mysql数据库并生成Model和DAL层

    Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架.相比于LINQ TO SQL,EF框架具有很明显的优势: EF框架 ...

  4. efcore mysql数据库codefirst生成

    添加引用 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools Pomelo.EntityFrameworkCore.My ...

  5. Mysql 碎片整理与统计信息收集

    ======重新收集统计信息======= 1.分析和存储表的关键字分布 analyze table table_name; analyze 用于收集优化器的统计信息.和tuning相关:对 myis ...

  6. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  7. javaweb(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  8. 五.获得MYSQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  9. MyEclipse------如何查询MySQL数据库里面表的信息

    testExecuteQuary.jsp <%@ page language="java" import="java.util.*" pageEncodi ...

随机推荐

  1. ModuleNotFoundError: No module named 'Crypto'

    pycrypto已经舍弃了使用pycryptodome,pip uninstall pycrypto,然后安装pycryptodome,pip install pycryptodome 可能还需要改名 ...

  2. stark - 3 ⇲自动生成URL及视图

    以往建立了一张表,需要 1.为每张表创建4个url 2.为每张表创建4个视图函数 urlpatterns = [ url('^role/list/$',role.role_list,name='rol ...

  3. flask开发笔记

    目录 虚拟环境 Debug模式 配置文件 url传入参数 url反转 重定义向 模板 创建 jinjia2语法 模板继承 flash 加载静态文件 MySQL数据库命令 配置 更新.提交.删除 模型操 ...

  4. ajax session timeout

    授权过期后AJAX操作跳转到登录页的一种全局处理方式 菜鸟程序员之Asp.net MVC Session过期异常的处理 基于WebImage的图片上传工具类

  5. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

    //我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...

  6. 卸载Windows,安装纯Linux

    操作步骤 下载安装一键GHOST优盘版 参考帮助文档,安装U盘启动 重启电脑,F12进入模式选择界面,选择USB device 选择DOS 工具 进入Disk Genius 删除掉除主分区(0)外的其 ...

  7. python fileinput处理多文件

    import fileinput with fileinput.input(files=(path1,path2)) as f: for line in f: print(line)

  8. python学习-基础知识-1

    1.计算机历史 计算机使用高低电压的两种状态来描述信息.计算机可以理解的只有二进制数据即010100011....,1个比特位可以表示的状态只有2种,n个比特位可以表示的状态有2的n次方种. 所以如果 ...

  9. 使用java配置来构建spring项目

    java配置是Spring4.x推荐的配置方式,可以完全代替xml配置,java配置是通过@Configuration和@Bean来实现的.@Configuration声明当前类是一个配置类,相当于S ...

  10. linux下对应mysql数据库的常用操作

    ssh管理工具连接mysql数据库. 一.连接mysql数据库: 通过shh管理工具,登录linux的用户名,密码,进入ssh的命令行界面后,执行如下命令: mysql -u 数据库用户名 -p 然后 ...