mysql function 表名作为参数_mysql 常用的分组聚合函数
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 常用的分组聚合函数相关推荐
- 动态游标(例如表名作为参数)以及动态SQL分析
表名作为参数的动态游标 DECLAREv_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP';--l_rec SYS_REFCURSOR;TYPE ...
- mysql多表查询详解_MySQL多表查询详解上
时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...
- mysql 建表时建立索引_mysql 分享建表和索引的几点规范
一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...
- mysql创建表设置自增_mysql 创建表并设置主键自增
mysql 创建表并设置主键自增 mysql 创建表: mysql> create table user( -> userid int(4) primary key not null au ...
- MySQL的表分区详解_MySQL的表分区详解
一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...
- mysql常用命令行操作(二):表和库的操作、引擎、聚合函数
一.查看.创建.删除数据库 create database library default character set utf8 collate utf8_general_ci; # 创建数据库并设置 ...
- mysql编辑表php源码_MySQL修改表的实际应用代码示例
以下的文章主要介绍的是MySQL修改表的实际操作命令,同时本文也有对MySQL修改表的实际操作代码的描述,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了. ALTER [IGNOR ...
- mysql创建表时显示错误_MYSQL创建表出现错误 ERROR Code 1118如何解决
ERROR Code 1118.Row size too large. The maximum row size for the used table type, not counting BLOBs ...
- mysql创建表有则删除_MySQL创建表和删除表
创建表 简单的方式 CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE ); 或者是 CREATE TABLE ...
最新文章
- 在 ubuntu下面利用libpcap编程
- fwrite、write、fread、read
- 使用公用表表达式的递归查询
- 使用OpenXml打开word文档中嵌入的另一个文档
- 顺丰同城:香港IPO发行价定为16.42港元
- 华为提交“NovaBuds”商标申请:nova要出耳机了?
- hdu 1712 ACboy needs your help
- 设计模式的基本原则 + 类与类之间的关系
- 原生JS实现拖动滑块验证登录效果
- 公众号基本的绑定手机号页面(截取code,手机号正则,验证码倒计时)
- es mapping 设置
- php显示某年某月某日,C++_C++自定义函数判断某年某月某日是这一年中第几天,本文实例讲述了C++自定义函数 - phpStudy...
- docker应用篇(1)如何搭建VXXXN
- c语言贪吃蛇游戏问题描述,贪吃蛇小游戏的几个问题
- linux usr/bin/和 usr/local/bin之间的关系,什么是软链接?
- 电信天翼网关连接多个路由器
- were passed to component but could not be automatically inherited because component renders fragment
- android通讯录项目分析,Android 通讯录展示
- 2021-05-13 python样条插值(一)
- 堆排序稳定性举例_常见排序算法的稳定性分析
热门文章
- 在Amazon EMR上运行Hadoop MapReduce作业
- 集成JavaFX和Swing(修订版)
- Spring:自动接线或不自动接线
- 使用GlassFish 3.1.2.2和Primefaces 3.4的JDBC领域和基于表单的身份验证
- 在没有XML的情况下测试Spring和Hibernate
- JavaOne正在重建动力
- 黑苹果sd卡认不出来_天生一对:新入苹果M1笔记本,DOCKCASE拓展坞弥补缺憾
- IntelliJ IDEA for Mac 在MacOS模式下的注释快捷键(Comment Shortcut)
- Linux下常用文本处理命令
- 判断选择语句switch...case