• mysql数据库优化课程---10、mysql数据库分组聚合


    mysql数据库优化课程---10、mysql数据库分组聚合

    一、总结

    一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;

    select class,max(id),min(id),count(*),sum(id),avg(id) from user group by class;

    1、为什么操作系统要选择linux?

    很多开源产品:开源:节约资源

    a、开源产品或者不开源产品的第一版都是linux,windows做不到

    b、没有界面的黑屏系统能够极大的节约资源,windows开机就占了1-2g的内存,windows内存释放有问题,你电脑开机几天就要重启,服务器的话也是开了几天就卡了,linux就不会,linux的回收机制还是比较强大的

    c、因为linux开源,旗下的很多开源的产品,而且这些开源的产品最开始的版本也是在linux下的,甚至很多都不会发布windows版本

    2、mysql随机数函数怎么使用?

    order by rand()

    3、mysql如何从一个表中随机取一条数据?

    order by rand() limit 1

    select * from user order by rand() limit 1;

    4、mysql统计函数的两种方法?

    count(*)
    count(id)

    select count(*) from user;
    select count(id) from user;

    5、分组聚合怎么使用?

    group by class字段:统计每个班的总人数:mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;

    按照班级的字段进行分组‘

    在分组的情况下,聚合是聚合的分组的数据

    统计每个班的总人数:
    mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;

    user表数据:
    +----+----------+----------+-------+
    | id | username | password | class |
    +----+----------+----------+-------+
    |  1 | user1    | 123      |     1 |
    |  2 | user2    | 123      |     1 |
    |  3 | user3    | 123      |     1 |
    |  4 | user4    | 123      |     2 |
    |  5 | user5    | 123      |     1 |
    |  6 | user6    | 123      |     3 |
    |  7 | user7    | 123      |     2 |
    |  8 | user8    | 123      |     1 |
    |  9 | user9    | 123      |     3 |
    | 10 | user10   | 123      |     1 |
    +----+----------+----------+-------+

    group by分组聚合的使用:
    #按条件进行分组,然后在分组的基础上进行有条件的聚合.

    把每个班的第一个人取出来:
    mysql> select * from user group by class;
    +----+----------+----------+-------+
    | id | username | password | class |
    +----+----------+----------+-------+
    |  1 | user1    | 123      |     1 |
    |  4 | user4    | 123      |     2 |
    |  6 | user6    | 123      |     3 |
    +----+----------+----------+-------+

    统计每个班的总人数:
    mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;
    +--------+--------+
    | 班级   | 人数   |
    +--------+--------+
    | 1 班   | 6 人   |
    | 2 班   | 2 人   |
    | 3 班   | 2 人   |
    +--------+--------+


    6、统计每个班的总人数?

    count(*):concat(count(*),' 人') 人数
    group by class
    select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;

    +--------+--------+
    | 班级   | 人数   |
    +--------+--------+
    | 1 班   | 6 人   |
    | 2 班   | 2 人   |
    | 3 班   | 2 人   |
    +--------+--------+

    二、内容在总结中

    随机数rand函数:
    select * from user order by rand() limit 1;

    统计个数count函数:
    #统计表总行数:
    select count(*) from user;
    select count(id) from user;

    #统计符合条件的行数:
    select count(*) from user where id>2;

    求和sum():
    select sum(id) from user;

    平均值avg():
    select avg(id) from user;

    最大值max():
    select max(id) from  user;

    最小值min():
    select min(id) from  user;

    user表数据:
    +----+----------+----------+-------+
    | id | username | password | class |
    +----+----------+----------+-------+
    |  1 | user1    | 123      |     1 |
    |  2 | user2    | 123      |     1 |
    |  3 | user3    | 123      |     1 |
    |  4 | user4    | 123      |     2 |
    |  5 | user5    | 123      |     1 |
    |  6 | user6    | 123      |     3 |
    |  7 | user7    | 123      |     2 |
    |  8 | user8    | 123      |     1 |
    |  9 | user9    | 123      |     3 |
    | 10 | user10   | 123      |     1 |
    +----+----------+----------+-------+

    group by分组聚合的使用:
    #按条件进行分组,然后在分组的基础上进行有条件的聚合.

    把每个班的第一个人取出来:
    mysql> select * from user group by class;
    +----+----------+----------+-------+
    | id | username | password | class |
    +----+----------+----------+-------+
    |  1 | user1    | 123      |     1 |
    |  4 | user4    | 123      |     2 |
    |  6 | user6    | 123      |     3 |
    +----+----------+----------+-------+

    统计每个班的总人数:
    mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;
    +--------+--------+
    | 班级   | 人数   |
    +--------+--------+
    | 1 班   | 6 人   |
    | 2 班   | 2 人   |
    | 3 班   | 2 人   |
    +--------+--------+


    补充:
    -----------------------------------------------
    分组聚合:
    select class,max(id),min(id),count(*),sum(id),avg(id) from user group by class;
    +-------+---------+---------+----------+---------+---------+
    | class | max(id) | min(id) | count(*) | sum(id) | avg(id) |
    +-------+---------+---------+----------+---------+---------+
    |     1 |      10 |       1 |        6 |      29 |  4.8333 |
    |     2 |       7 |       4 |        2 |      11 |  5.5000 |
    |     3 |       9 |       6 |        2 |      15 |  7.5000 |
    +-------+---------+---------+----------+---------+---------+

     
  • 相关阅读:
    方法的重载;数组 (Java Day05)
    switch语句;for/while循环;死循环;跳转语句;嵌套循环;方法及方法的调用(Java Day04)
    运算符;键盘录入;分支结构(Java Day03)
    基础概念学习;常量;变量;编码表;数据类型转换(Java Day02)
    Java语言基本概述;入门案例学习;环境变量的配置;Eclipse安装(Java Day01)
    JVM内存模型
    java多线程对CountDownLatch的使用
    System.nanoTime()的使用
    this用法
    idea取消重复代码提醒的功能
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9806022.html
Copyright © 2020-2023  润新知