• MySQL数据库(4)----生成统计信息


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

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

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

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

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

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

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

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

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

    mysql> SELECT COUNT(*) FROM student WHERE sex='F';
    +----------+
    | COUNT(*) |
    +----------+
    |        2 |
    +----------+
    1 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) |
    +---------------------+-------------+-------------------+
    |                   2 |           6 |                 6 |
    +---------------------+-------------+-------------------+
    1 row in set (0.00 sec)

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

    mysql> SELECT sex , COUNT(*) FROM student GROUP BY sex;
    +-----+----------+
    | sex | COUNT(*) |
    +-----+----------+
    | F   |        2 |
    | M   |        4 |
    +-----+----------+
    2 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> 3 ORDER BY count DESC;
    +-----+-------+
    | sex | count |
    +-----+-------+
    | M   |     4 |
    +-----+-------+
    1 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) +1 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 |
    +---------+---------+------+-------+---------+-------+
    |       1 |       6 |    6 |    21 |  3.5000 |     6 |
    +---------+---------+------+-------+---------+-------+
    1 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   |     2 |
    | M   |     4 |
    | NULL |     6 |
    +-----+-------+
    3 rows in set (0.00 sec)

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

      

  • 相关阅读:
    将centos_yum源更换为阿里云(官方文档)
    JIRA 破解文件研究(Win 7环境)
    告别拖延症,你也可以轻松做到
    VS2015 + EF6连接MYSQL
    start-stop-daemon
    stm32开发板无法正常写入的问题或者写入后无法正常运行的问题
    进制转换
    回文判断程序
    C语言结构体指针的引用问题
    升级/安装主题插件提示权限不足 输入FTP解决办法
  • 原文地址:https://www.cnblogs.com/dongling/p/5679225.html
Copyright © 2020-2023  润新知