精华内容
下载资源
问答
  • 四 . 分组函数

    2021-03-17 09:32:17
    分组函数 一.分组函数/聚合函数/多行处理函数 输入多行,处理一行,会自动忽略NULL值 count:计数 sum:求和 avg:求平均 max:最大值 min:最小值 注意:所有分组函数都是针对某一组数据进行操作的。 1.eg:分数...

    四 . 分组函数

    一.分组函数/聚合函数/多行处理函数
    输入多行,处理一行,会自动忽略NULL值
    count:计数
    sum:求和
    avg:求平均
    max:最大值
    min:最小值
    注意:所有分组函数都是针对某一组数据进行操作的。
    1.eg:分数求和。
    mysql> select sum(score)
        -> from t_student;
    +------------+
    | sum(score) |
    +------------+
    |       1325 |
    +------------+
    2.eg:求平均值
    mysql> select avg(score) from t_student;
    +------------+
    | avg(score) |
    +------------+
    |    73.6111 |
    +------------+
    注意:分组函数自动忽略NULL,在所有数据库中,只要
         有null参与运算结果都为空。
         单行处理函数(输入单行,输出单行)
    3.eg:null = 828 + null;
    方法:使用ifnull函数,是单行处理函数(可能为空的数据,被当作的某个值)
    mysql> select name,ifnull(score,0)
        -> from t_student;
    +------+-----------------+
    | name | ifnull(score,0) |
    +------+-----------------+
    | 张三  |              70 |
    | 张三  |              80 |
    | 张三  |              66 |
    | 李四  |              50 |
    | 李四  |              75 |
    | 李四  |              80 |
    | 王五  |              77 |
    | 王五  |              55 |
    | 王五  |              88 |
    | 王五  |              90 |
    +------+-----------------+
    二.分组查询
    1.eg:找出成绩高于平均分的学生。
    mysql> select name,score
        -> from t_student
        -> where score>avg(score);
    ERROR 1111 (HY000): Invalid use of group function
    报错原因:
      SQL语句的语法规则:分组函数不可直接使用在where子句中。
    
      count * 和 count 具体字段,之间的区别?
      count *:统计总记录条数,与null无关。(和某个字段无关)
      mysql> select count(*) from t_student;
      +----------+
      | count(*) |
      +----------+
      |       18 |
      +----------+
    count score:除null之外所有的数据总数量。
    2.eg:分组函数组合使用
      mysql> select count(*),sum(score),avg(score)
          -> from t_student;
      +----------+------------+------------+
      | count(*) | sum(score) | avg(score) |
      +----------+------------+------------+
      |       18 |       1325 |    73.6111 |
      +----------+------------+------------+
    3.group by,having
    group by:按照某个字段或某些字段进行分组。
    having:对分组后的数据(不满意)进行再次过滤 。
    注:分组函数和group by 联用时,任何一个分组函数
       (count,sum,avg,max,min)都是在group by
       语句执行后才执行。
       分组函数不可直接使用在where子句中。因为group
       by实在where执行之后才执行的。实现先分组,再使
       用分组函数。
    eg:求年龄大于平均年龄的学生姓名,学号。
        思路:
        step1:找出平均年龄
        step2:找出大于平均年龄的学生信息
        select name,id
        from Student
        where(
            select avg(age)
            from Student;
        );
    4.多字段分组查询
    执行顺序:
      select       (5)
            ***
      from         (1)
            ***
      where        (2)
            ***
      group by     (3)
            ***
      having       (4)
            ***
      order by     (6)
            ***
    eg1:找出每个部门不同岗位的最高薪资。
       select 部门id,job,max(sal),
       from emp
       group by 部门id,job;
    eg2:找出每个部门的最高薪资,且薪资高于2000。
       方法一:
       select max(sal),部门id
       from emp
       group by 部门id
       having max(sal)>2000;
       执行效率低,筛选数据不及时。
       方法二:
       select max(sal),部门id
       from emp
       where sal>2000
       group by 部门id
    eg3:找出每个部门的平均薪资,且薪资高于2000。
       select avg(sal),部门id
       from emp
       group by 部门id
       having avg(sal)>2000;
    
    展开全文
  • Oracle查询之分组函数

    2017-07-21 17:45:57
    分组函数用于将表中数据分成若干个小组,再对小组中的数据执行组函数 默认情况下一张表的数据就是一个组 Oracle中常见的组函数有avg,count,max,min,sum avg:求平均值 例如:select avg(age) from test 结果:...
    分组函数用于将表中数据分成若干个小组,再对小组中的数据执行组函数
    默认情况下一张表的数据就是一个组
    Oracle中常见的组函数有avg,count,max,min,sum
    avg:求平均值
    例如:select avg(age) from test
    结果:查询出test表中的平均年龄

    count:求查询到的记录总数
    例如:select count(*) from test
    结果:查询出test表中记录总数
    例如:select count(某个字段名)from test
    结果:查询出字段不为空的记录总数
    例如:select count(distinct 字段) from test
    结果:查询出非空并且不重复的某字段的总数

    max:求出某个组中最大值
    例如:select max(age) from test
    结果:查询出表中最大年龄

    min:求出某个组中最小值
    例如:select min(age) from test
    结果:查询出表中最小年龄

    sum:求出某个组中某个字段的总和
    例如:select sum(age) from test
    结果:查询出表中年龄总和

    分组函数的语法:
    SELECT [column,] group_function(column), ... 
    FROM table 
    [WHERE condition]
    [GROUP BY column]
    [HAVING group_condition]
    [ORDER BY column];

    执行顺序从前至后:
    FROM ,WHERE,GROUP BY,HAVING,SELECT,ORDER BY

    WHERE和HAVING的区别:
    WHERE和HAVING都能作为条件帅选
        WHERE比HAVING先执行
        WHERE出现在FROM后面,而HAVING出现在GROUP BY后面
        HAVING后面可以出现组函数,而WHERE后面不能出现(看执行顺序就知道,WHERE执行时还没有分组)

    GROUP BY和HAVING的区别
    GROUP BY可以单独存在,它的后面可以不出现HAVING子句 但是HAVING子句要想出现就必须跟在GROUP BY后面

    分组的具体实例(假设test表中有id,salary等字段)
    SELECT sum(salary) 
    FROM test
    WHERE id>2
    GROUP BY id
    HAVING sum(salary) >10000
    ORDER BY id ASC
    结果:查询出test表中id大于2并且总工资大于10000的每组的总工资,并且按照id升序显示
    分析(按照执行过程):
    首先进入test这个表,执行条件语句where,筛选出id大于2的所有行
    然后找出id大于2的所有行
    根据id分成很多组
    筛选出总工资大于10000的组
    根据id降序展示结果
    展开全文
  • 分组函数使用注意:

    2019-04-22 16:25:28
    分组情况2-按照年龄分组:80后一组,90后一组; 分组情况3-按照籍贯分组:广东一组,湖南一组,江西一组; 语法: SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数 FROM 表名称 [别名]...

    针对于班上所有的同学:

    分组情况1-按照性别分组:男生一组,女生一组,之后可以统计男生和女生的数量;

    分组情况2-按照年龄段分组:80后一组,90后一组;

    分组情况3-按照籍贯分组:广东一组,湖南一组,江西一组;
    语法:

        SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数
         
        FROM 表名称 [别名], [表名称 [别名] ,…]
         
        [WHERE 条件(s)]
         
        [GROUP BY 分组字段1 [,分组字段2 ,…]]
         
        [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]];
        注意:
    		    使用GROUP BY子句将表分成小组
    		    组函数忽略空值,可以使用ifnull
    		    结果集隐式按升序排列,如果需要改变排序方式可以使用order by 子句   
    		    1,出现在SELECT列表中的字段,如果出现的位置不是在分组函数中,那么必须出现在GROUP BY子句中
    			2,在GROUP BY 子句中出现的字段,可以不出现在SELECT列表中
    		 3,如果没有GROUP BY子句,SELECT列表中的任何列或表达式不能使用统计函数(单独使用统计函数除外):
    

    分组函数单独使用:

    SELECT COUNT(empno) FROM emp;
    

    错误的使用,出现了其他字段:

    SELECT empno,COUNT(empno) FROM emp;
    

    正确做法:

    SELECT empno,COUNT(empno) FROM emp GROUP  BY empno,job;
    

    如果现在要进行分组的话,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现:

    正确做法:

    SELECT job,COUNT(empno),AVG(sal)
     
    FROM emp
     
    GROUP BY job;
    

    错误的做法:

    SELECT deptno,job,COUNT(empno),AVG(sal)
     
    FROM emp
     
    GROUP BY job;
    

    正确做法:

    SELECT deptno,job,COUNT(empno),AVG(sal)
     
    FROM emp
     
    GROUP BY  deptno,job;
    

    在group by 子句中,可以按单列进行分组,也可以在多列上进行分组,多列分组就是按照多个字段的组合进行分组,最终的结果也会按照分组字段进行排序显示。

    -- 1,按照职位分组,求出每个职位的最高和最低工资
    SELECT MAX(SAL),JOB FROM emp GROUP BY JOB;
     
    -- 2,查询出每一个部门员工的平均工资
    SELECT AVG(SAL),DEPTNO FROM emp GROUP BY DEPTNO;
     
    -- 3,查询平均工资高于2000的部门和其平均工资
    SELECT AVG(SAL),DEPTNO FROM emp GROUP BY DEPTNO HAVING AVG(SAL) >=2000;
     
    -- 4,查询各个部门和岗位的平均工资
    SELECT AVG(SAL),DEPTNO,JOB FROM emp GROUP BY DEPTNO,JOB;
     
    -- 5,查询各个管理人员下员工的平均工资,其中最低工资不能低于1300,不计算老板
    SELECT AVG(SAL),DEPTNO,JOB FROM emp GROUP BY job HAVING AVG(SAL) >1300;
     
    -- 6,查询在80,81,82,83年各进公司多少人
    SELECT COUNT(*),YEAR(HIREDATE) FROM emp WHERE YEAR(HIREDATE) IN ('1980','1981','1982','1983') GROUP BY YEAR(HIREDATE);
    
    展开全文
  • Java基础27–mysql-分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值。 组函数类型 AVG() SUM() MAX() MIN() **COUNT() ** 可以对数值型数据使用AVG 和 SUM 函数。 SELECT AVG...

    在这里插入代码片## Java基础27–mysql-分组函数

    • 什么是分组函数

    分组函数作用于一组数据,并对一组数据返回一个值。
    在这里插入图片描述

    • 组函数类型
      • AVG()
      • SUM()
      • MAX()
      • MIN()
      • **COUNT() **

    可以对数值型数据使用AVG 和 SUM 函数。

    SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)
    FROM   employees
    WHERE  job_id LIKE '%REP%';
    
    

    可以对任意数据类型的数据使用 MIN 和 MAX 函数。

    SELECT MIN(hire_date), MAX(hire_date)
    FROM	  employees;
    

    COUNT(*)返回表中记录总数,适用于任意数据类型

    SELECT COUNT(*)
    FROM	  employees
    WHERE  department_id = 50;
    

    •COUNT(expr) 返回expr不为空的记录总数。

    SELECT COUNT(commission_pct)
    FROM   employees
    WHERE  department_id = 50;
    
    • 问题:用count(*),count(1)谁好呢?

      其实,对于myisam引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。

      Innodb引擎的表用count(*)直接读行数,效率很低,因为innodb真的要去数一遍。

    分组函数
    (1)count():统计记录数
    count(
    )和count(常量)结果是一样的
    count(字段名)统计非null值
    (2)sum(x):总和
    (3)max(x):最大值
    min(x):最小值
    (4)avg(x):平均值

    #查询员工总数
    SELECT COUNT(*) FROM t_employee;
    SELECT COUNT(1) FROM t_employee;
    SELECT COUNT(100) FROM t_employee;
    SELECT COUNT(commission_pct)  FROM t_employee;
    
    #查询男员工数量
    SELECT COUNT(*) FROM t_employee WHERE gender = '男';
    
    #查询薪资大于20000的女员工的数量
    SELECT COUNT(*) FROM t_employee WHERE gender ='女' AND salary > 20000;
    
    #查询每个月看要给所有员工发的实发工资的总和是多少
    #select sum(实发工资) from t_employee;
    SELECT SUM(salary + salary*IFNULL(commission_pct,0)) FROM t_employee;
    #保留到分,后面四舍五入
    SELECT ROUND(SUM(salary + salary*IFNULL(commission_pct,0)),2) FROM t_employee;
    
    #查询最高工资和最低工资
    SELECT MAX(salary),MIN(salary) FROM t_employee;
    
    #查询年龄最大的员工的年龄
    SELECT MAX(YEAR(NOW()) - YEAR(birthday)) FROM t_employee;
    
    #查询入职最早的一个员工的入职日期
    SELECT MIN(hiredate) FROM t_employee;
    
    #查询平均薪资
    SELECT AVG(salary) FROM t_employee;
    
    #查询员工的平均年龄
    SELECT ROUND(AVG(YEAR(NOW()) - YEAR(birthday)),0) FROM t_employee;
    

    若是要查询排名第二的,还需要结合排序函数、limit等函数

    展开全文
  • 分组函数结合HAVING

    2018-07-05 17:56:45
    选择表中的最后一个数据,先倒序再加上limit; mysql数据库: SELECT column_name FROM table_name ORDER BY column_name DESC LIMIT 1; sql server数据库: ...我们想查询平均年龄在20岁以上的班级
  • 数据库中的分组函数+练习题

    千次阅读 2016-05-24 20:08:10
    常用的分组函数1.统计数量 count(*) 2.求平均函数 Avg() 3.最大值max() 4.最小值min() 5.总数 sum()二.特殊的分组函数1.group by:按什么字段分组 2.having :对分好的组再次条件筛选(一般对分组函数...
  • 当我们错误的使用分组函数之后,mysql会报错,提示“Invalid use of group function”,这就是今天要说的问题:where后面不能直接跟分组函数分组函数有五种count、sum、avg、max、min 为什么他们不能跟在...
  • .mean() print(avage) mean 的含义 : 不要 null ,计算的时候,只保留有值的数据一起计算,没有值的数据,不参与总数量计算,也不参与总年龄计算 5 ,pivot_table : 分组函数 代码 : if __name__ == '__main__': ...
  • 数据分组--按照年龄分组

    千次阅读 2021-01-02 14:59:07
    使用if或者vlookup函数,进行对员工年龄分组。 if嵌套有层数限制。 VLOOKUP (查找值、包含查找值的范围、区域中包含返回值的列号、近似匹配 (TRUE) 或完全匹配 (FALSE) ) 。 IF(内容为 True,则执行某些操作,否则...
  • 就是一张信息表 有专业和性别 ,年龄等信息 我现在通过分组函数将各个专业中的人数显示出来了还同时显示这个专业男生的人数,并显示所占专业人数百分比 //在平台中sql中的正则表达式单\杠变成双斜杠(\\)
  • 根据生日获取年龄 select birthday,DATEDIFF(now(),birthday)/365 age FROM lg_lawyer_base where not ISNULL(birthday) and isDeleted = 0; 使用当前DATEDIFF函数 用当前...根据获取到的年龄分组统计 24以下、25...
  • mysql按照年龄区间分组查询

    万次阅读 2018-04-28 17:59:49
    需求:统计不同年龄区间的男女人数,比如0-10岁之间、10-20、20-30、30-40……每个年龄段中男女人数分别是多少。 实现:使用mysql中的interval函数。 interval(a,a1,a2,a3,a4) 其中第一个参数a为要做比较的值,...
  • 这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:。 分组查询的语法格式如下: select ...
  • mysql 聚合函数 分组

    2019-11-18 16:18:38
    mysql 聚合函数 分组 聚合函数: 总数 count 查询所有男性记录数量: select count(*) from students where gender=“男”; 最大值 max 查询最大年龄: select max(age) from students; 最小值 min 查询最小年龄: ...
  • 数据分组与聚合函数

    2014-08-23 20:08:17
     有的时候需要对部分分组进行过滤,比如只检索人数多余1个的年龄段,有的开发人员会使 用下面的SQL语句:  SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee  GROUP BY FAge  WHERE COUNT(*)>1...
  • 检测表只有身份证号,无年龄和性别字段,需要对检测数据进行年龄分组 2.需要根据性别的不同对数据进行比较,性别不同,比较的标准也不一样 实现思路: 1.先根据身份证号运用mysql函数TIMESTAMPDIFF(YEAR,STR_TO...
  • (一)sum、max 和 min 聚合函数 聚合函数概念 聚合函数用于对一组值进行计算并返回一个汇总值,使用聚合函数可以统计记录行数、计算某个字段值的总和以及这些值的最大值、最小值和...--查询年龄最大的公交司机的出生
  • mysql聚合函数分组

    2020-10-26 23:31:47
    Mysql 数据库的聚合函数: --总数 --count() --计算有多少男性 select count(*) as 男性人数 from gwl where gender="男"; --提取最大值 --max --提取男性年龄最大值: select max(*) from gwl where age; --...
  • 聚合函数 常用的聚合函数 count(col): 表示求指定列的总行数 max(col): 表示求指定列的最大值 min(col): 表示求指定列的最小值 sum(col): 表示求指定列的和 avg(col): 表示求指定列的平均值 聚合函数的特点 聚合...
  • 聚合函数分组

    2016-01-11 15:59:51
    使用聚合函数进行统计汇总 1.COUNT 返回结果集中行的数目  SUM 所有值的总和  AVG 平均值  MAX 最大值  MIN 最小值 2.执行行和列技术  select COUNT () from ;  select COUNT (s_id) from s_stu; 统计全班...
  • 4.7、组函数及分组统计(重点) 分组:例如,把所有的男生分为一组,女生分为一组。 如果想求出每一组的平均身高,平均年龄等,这就需要使用分组函数。 4.7.1、组函数 ...
  • 统计函数分组 函数名 意思 功能 count 计数 计算一张表的记录个数/计算一列中值的个数 min 最小 求一列值的最大值 max 最大 求一列值的最大值 sum 总和 计算一列中值的总和【数值型】 avg 平均值 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,795
精华内容 11,518
关键字:

年龄分组函数