mysql 常用的分组聚合函数

1.聚合运算

一般情况下,需要的聚合数据(和,平均值,最大,最小等)并不总是存储在表中,但是可以执行存储数据的计算来获取它.

根据定义,聚合函数对一组值执行计算并返回单个值.

MySQL提供了许多聚合函数,包括AVG,COUNT,SUM,MIN,MAX等.除COUNT函数外,其它聚合函数在执行计算时会忽略NULL值.

有如下prices 表,分别进行聚合操作

 use test;-- 创建表 create table prices(    id int not null, count1 int, count2 int, count3 int, primary key (id)) engine=InnoDB default charset utf8mb4;insert into prices values(1,20,null,null),(2,50,500,null),(3,390,262,null),(4,28,234,null);select * from prices;
id count1 count2 count3
1 20 null null
2 50 500 null
3 390 262 null
4 28 234 null

注意:

  • 函数不允许嵌套使用,比如:count(max(..))

  • 函数的参数可以是列或者函数表达式

  • 一个select语句可以出现多个聚合函数

avg():求平均值

  • 自动忽略null

 mysql root@192.168.101:test> select avg(count1),avg(count2),avg(count3) from pri                             ces;                                               +-------------+-------------+-------------+| avg(count1) | avg(count2) | avg(count3) |+-------------+-------------+-------------+| 122.0000    | 332.0000    | <null>      |+-------------+-------------+-------------+

count() :统计出现的满足条件的次数.

  • 不忽略null

 -- count 计数-- 返回count2中等于500的个数 select count(count2) from prices where count2=500;-- 返回总共的行数select count(*) from prices;-- 返回不重复的值select count(distinct count2) from prices;

max()\min()\sum()

  • 自动忽略null

 select max(count1),min(count2),sum(count3) from prices;

2.分组计算

基本语法:

 select  聚合函数(字段名)  from  表名where 查询条件group by 字段名having  过滤条件

1.gruop by

作用于聚合函数,根据给定的列或表达式的每一个不同的值将表中的行分成不同的组,使用函数返回每一组的统计信息.

 SELECT column_name, aggregate_function(column_name) -- aggregate_function 聚合函数FROM table_nameWHERE column_name operator valueGROUP BY column_name;
  • 出现在select子句中的单独的列,必须出现在group by 子句中作为分组列

  • 分组列可以不出现在select 子句中

  • 分组列可出现在select 子句中的一个复合表达式中

  • 如果group by 后面是一个复合表达式,那么在select子句中,它必须整体作为表达式的一部分才能使用

有如下员工表(db_employee):

 -- 创建员工表create table db_employee(    id int(11) not null auto_increment,    name varchar(20) not null,    date datetime not null,    singin tinyint(4) not null default 0 comment '登陆后台次数',    primary key (id)) engine=InnoDB default charset utf8;insert into db_employee values(1, 'Jack', '2016-04-19 15:26:02', 1),(2, 'Peny', '2016-04-11 15:26:02', 4),(3, 'Jony', '2016-04-12 15:26:02', 2),(4, 'Bob', '2016-04-13 15:26:02', 4),(5, 'Harry', '2016-04-15 15:26:02', 6),(6, 'Peny', '2016-04-17 15:26:02', 4);select * from db_employee;
id name date singin
1 Jack 2016-04-19 15:26:02 1
2 Peny 2016-04-11 15:26:02 4
3 Jony 2016-04-12 15:26:02 2
4 Bob 2016-04-13 15:26:02 4
5 Harry 2016-04-15 15:26:02 6
6 Peny 2016-04-17 15:26:02 4

将数据表按名字进行分组,并统计每个人有多少条记录

 mysql root@192.168.101:test> select name,count(*) as number  from db_employee group by name;                                                         +-------+--------+| name  | number |+-------+--------+| Bob   | 1      || Harry | 1      || Jack  | 1      || Jony  | 1      || Peny  | 2      |+-------+--------+

将数据表按名字进行分组,并统计每个人登录多少次(分组求和)

 mysql root@192.168.101:test> select name,sum(singin) from db_employee group by name;                                                                 +-------+-------------+| name  | sum(singin) |+-------+-------------+| Bob   | 4           || Harry | 6           || Jack  | 1           || Jony  | 2           || Peny  | 8           |+-------+-------------+

更改数据,并先按照名字分组,在按照登陆次数分组(多组分)

 update db_employee set singin=5 where id = 6;select name,singin from db_employee group by name,singin;

gruop by: 首先将select语句得到一个结果集,然后按照分组字段,将具有相同分组字段的记录归类成一条记录.

2.having

语法:

 SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value;

where 子句比group by 先执行,而函数必须在gruop by 之后再执行,那么在group by 之后可以使用having 子句进行结果集的过滤

  • where 子句在分组前对记录进行过滤

  • having 子句在分组后对记录进行过滤

having 的用法

  • having 可以单独使用不和group by 配合,如果只有having ,表中所有的列分为一组

  • having 子句中可以使用 函数

  • having 子句中的列,那么出现在函数中,那么出现在group by 子句中,否则报错.

 -- 显示id大于2,并且按照人名进行排列,排列的结果要求大于4select name, sum(singin) as count from db_employee where id > 2 group by name having sum(singin) > 4;

mysql function 表名作为参数_mysql 常用的分组聚合函数相关推荐

  1. 动态游标(例如表名作为参数)以及动态SQL分析

    表名作为参数的动态游标 DECLAREv_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP';--l_rec SYS_REFCURSOR;TYPE ...

  2. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  3. mysql 建表时建立索引_mysql 分享建表和索引的几点规范

    一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...

  4. mysql创建表设置自增_mysql 创建表并设置主键自增

    mysql 创建表并设置主键自增 mysql 创建表: mysql> create table user( -> userid int(4) primary key not null au ...

  5. MySQL的表分区详解_MySQL的表分区详解

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...

  6. mysql常用命令行操作(二):表和库的操作、引擎、聚合函数

    一.查看.创建.删除数据库 create database library default character set utf8 collate utf8_general_ci; # 创建数据库并设置 ...

  7. mysql编辑表php源码_MySQL修改表的实际应用代码示例

    以下的文章主要介绍的是MySQL修改表的实际操作命令,同时本文也有对MySQL修改表的实际操作代码的描述,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了. ALTER [IGNOR ...

  8. mysql创建表时显示错误_MYSQL创建表出现错误 ERROR Code 1118如何解决

    ERROR Code 1118.Row size too large. The maximum row size for the used table type, not counting BLOBs ...

  9. mysql创建表有则删除_MySQL创建表和删除表

    创建表 简单的方式 CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE ); 或者是 CREATE TABLE ...

最新文章

  1. 在 ubuntu下面利用libpcap编程
  2. fwrite、write、fread、read
  3. 使用公用表表达式的递归查询
  4. 使用OpenXml打开word文档中嵌入的另一个文档
  5. 顺丰同城:香港IPO发行价定为16.42港元
  6. 华为提交“NovaBuds”商标申请:nova要出耳机了?
  7. hdu 1712 ACboy needs your help
  8. 设计模式的基本原则 + 类与类之间的关系
  9. 原生JS实现拖动滑块验证登录效果
  10. 公众号基本的绑定手机号页面(截取code,手机号正则,验证码倒计时)
  11. es mapping 设置
  12. php显示某年某月某日,C++_C++自定义函数判断某年某月某日是这一年中第几天,本文实例讲述了C++自定义函数 - phpStudy...
  13. docker应用篇(1)如何搭建VXXXN
  14. c语言贪吃蛇游戏问题描述,贪吃蛇小游戏的几个问题
  15. linux usr/bin/和 usr/local/bin之间的关系,什么是软链接?
  16. 电信天翼网关连接多个路由器
  17. were passed to component but could not be automatically inherited because component renders fragment
  18. android通讯录项目分析,Android 通讯录展示
  19. 2021-05-13 python样条插值(一)
  20. 堆排序稳定性举例_常见排序算法的稳定性分析

热门文章

  1. 在Amazon EMR上运行Hadoop MapReduce作业
  2. 集成JavaFX和Swing(修订版)
  3. Spring:自动接线或不自动接线
  4. 使用GlassFish 3.1.2.2和Primefaces 3.4的JDBC领域和基于表单的身份验证
  5. 在没有XML的情况下测试Spring和Hibernate
  6. JavaOne正在重建动力
  7. 黑苹果sd卡认不出来_天生一对:新入苹果M1笔记本,DOCKCASE拓展坞弥补缺憾
  8. IntelliJ IDEA for Mac 在MacOS模式下的注释快捷键(Comment Shortcut)
  9. Linux下常用文本处理命令
  10. 判断选择语句switch...case