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. Elasticsearch 因拷贝多余的jar到lib库导致无法启动的问题

    因为需要测试,无意中拷贝了一个netty-buffer-4.1.16.Final.jar包放到es的lib目录下,晚上回家启动es的时候发现启动不起来了.检查日志发现如下错误. 其中有一句关键语句 C ...

  2. C语言编译器和IDE的选择

    什么是编译器: CPU只认识几百个二进制形式的指令,C语言对CPU而言简直就是天书.C语言是用固定的词汇与格式组织起来,简单直观,程序员容易识别和理解. 这时候就需要一个工具,将C语言代码转换成CPU ...

  3. dubbo核心流程一览

    整体设计 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. Serv ...

  4. 第七次 Scrum Meeting

    第七次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/11 22:00 10min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.11 ...

  5. zabbix4.2 安装

    官网https://www.zabbix.com/cn/download a. 安装 数据库rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86 ...

  6. linux curl post/put请求

    案列: -X: 请求方式 --header: 请求header -d: 请求的数据 最后跟上请求的地址 curl -X PUT --header 'Content-Type: application/ ...

  7. Spring boot 项目部署服务器

    Spring Boot 有两种部署到服务器的方式,这里介绍官方推荐的(jar包) 一.首先进行application.properties配置 # EMBEDDED SERVER CONFIGURAT ...

  8. C语言中结构体定义

    struct test { int a; }; /* 定义一个结构体,名字是test,这样就可以使用struct test 来定义变量.比如 struct test a; */ typedef str ...

  9. 没有循环的JavaScript

    有些文章中提到过,缩进(并不能特别准确的)说明了代码的复杂程度.我们想要的是简单的JavaScript.之所以层层缩进,是因为我们用抽象的方式解决问题.但要选用什么抽象方法呢?截止目前,我们没有在特定 ...

  10. eclipse中修改tomcat的配置,解决全局性的get提交乱码问题

    在项目中如果页面提交方式为get的时候,中文会出现乱码. 为了解决乱码问题我们有两种办法. 第一种:在程序中加入get提交乱码的解决 String username = new String(user ...