目录

1.聚合函数

1.1 count

1.2 sum

1.3 avg

1.4 max 和 min

2. group by

2.1 group by 的条件筛选——having

2.2 总结

3.日期函数

4.字符串函数

concat

replace

substring

以首字母大写,其余字母小写的方式显示员工的姓名

5.数学函数

format

rand()

6.其他函数

user()

md5

ifnull


1.聚合函数

函数 说明
count( [DISTINCT]  参数 ) 返回查询到的数据的数量
sum ( [DISTINCT] 参数) 返回查询到的数据的总和,不是数字没有意义
avg ( [DISTINCT] 参数 ) 返回查询到的数据的平均值,不是数字没有意义
max ( [DISTINCT] 参数) 返回查询到的数据的最大值,不是数字没有意义
min ( [DISTINCT] 参数) 返回查询到的数据的最小值,不是数字没有意义

什么是聚合函数?

聚合统计一定是直接或者间接统计列方向的某些数据。列方向上一定是相同属性的。对于行方向上,可以直接使用select 表达式相加/相乘等进行统计。

1.1 count

 当想查看,当前筛选出来的结果有几条时,可以使用count函数

使用 * 做统计,NULL不纳入统计。也可以用 count(1)等表达式进行统计

mysql> select count(*) from exam_result;
+----------+
| count(*) |
+----------+
|        7 |
+----------+
mysql> select count(name) from exam_result;
+-------------+
| count(name) |
+-------------+
|           7 |
+-------------+
1 row in set (0.00 sec)

查看去重之后的统计个数

mysql> select count(distinct math) from exam_result;
+----------------------+
| count(distinct math) |
+----------------------+
|                    6 |
+----------------------+
1 row in set (0.00 sec)mysql> select count(math) from exam_result;
+-------------+
| count(math) |
+-------------+
|           7 |
+-------------+

1.2 sum

统计英语成绩总分

mysql> select sum(english) from exam_result;
+--------------+
| sum(english) |
+--------------+
|          443 |
+--------------+
1 row in set (0.00 sec)mysql> select sum(english) from exam_result where english<60;
+--------------+
| sum(english) |
+--------------+
|          131 |
+--------------+

1.3 avg

计算英语成绩的平均分

mysql> select sum(english)/count(*) from exam_result ;
+-----------------------+
| sum(english)/count(*) |
+-----------------------+
|    63.285714285714285 |
+-----------------------+
1 row in set (0.00 sec)mysql> select avg(english) from exam_result;
+--------------------+
| avg(english)       |
+--------------------+
| 63.285714285714285 |
+--------------------+
1 row in set (0.00 sec)

计算总分的平均分

mysql> select avg(english+math+chinese) from exam_result;
+---------------------------+
| avg(english+math+chinese) |
+---------------------------+
|                       222 |
+---------------------------+

1.4 max 和 min

返回英语最高分

mysql> select max(english) from exam_result;
+--------------+
| max(english) |
+--------------+
|           90 |
+--------------+
1 row in set (0.00 sec)

返回 > 70 分以上的数学最低分

mysql> select min(math) from exam_result where math>70;
+-----------+
| min(math) |
+-----------+
|        73 |
+-----------+
1 row in set (0.00 sec)

2. group by

在select中使用group by 子句可以对指定列进行分组查询。

表结构如下

显示每个部门的平均工资和最高工资

mysql> select deptno,avg(sal) avgsal,max(sal) maxasl from emp group by deptno;
+--------+-------------+---------+
| deptno | avgsal      | maxasl  |
+--------+-------------+---------+
|     10 | 2916.666667 | 5000.00 |
|     20 | 2175.000000 | 3000.00 |
|     30 | 1566.666667 | 2850.00 |
+--------+-------------+---------+
3 rows in set (0.00 sec)

显示每个部门的每种岗位的平均工资和最低工资

mysql> select deptno,job,avg(sal) avgsal,max(sal) maxasl from emp group by deptno,job;
+--------+-----------+-------------+---------+
| deptno | job       | avgsal      | maxasl  |
+--------+-----------+-------------+---------+
|     10 | CLERK     | 1300.000000 | 1300.00 |
|     10 | MANAGER   | 2450.000000 | 2450.00 |
|     10 | PRESIDENT | 5000.000000 | 5000.00 |
|     20 | ANALYST   | 3000.000000 | 3000.00 |
|     20 | CLERK     |  950.000000 | 1100.00 |
|     20 | MANAGER   | 2975.000000 | 2975.00 |
|     30 | CLERK     |  950.000000 |  950.00 |
|     30 | MANAGER   | 2850.000000 | 2850.00 |
|     30 | SALESMAN  | 1400.000000 | 1600.00 |
+--------+-----------+-------------+---------+
9 rows in set (0.00 sec)

2.1 group by 的条件筛选——having

having和group by配合使用,对group by结果进行过滤

mysql> select deptno,avg(sal) avgsal from emp group by deptno;
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     10 | 2916.666667 |
|     20 | 2175.000000 |
|     30 | 1566.666667 |
+--------+-------------+
3 rows in set (0.00 sec)mysql> select deptno,avg(sal) avgsal from emp group by deptno having avgsal<2000;
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     30 | 1566.666667 |
+--------+-------------+
1 row in set (0.00 sec)

2.2 总结

  • group by将数据分开了,可以对特定组内进行某种操作。group by一定是配合聚合统计使用的。
  • group by后面跟的是分组的依据,只有这些依据可以出现在select 后面跟的参数中。
  • where和having并不冲突,where是在哪些条件下筛选出数据,而having是整个数据已经被全部筛选之后,挑选having条件满足的数据进行显示。
  • where是在表中数据初步被筛选的时候起效果的,而having是在完成整个分组聚合统计,然后进行筛选的

3.日期函数

  • 常用的日期函数
current_date() 当前日期
current_time() 当前时间
current_timestamp() 当前时间戳
date(datetime) 返回datetime参数的日期部分
date_add(date, interval value)

在date中添加日期或者时间

单位可以是year minute second

day

date_sub(date, interval value)

在date中减去日期或者时间

单位和date_add相同

datediff(date1,date2)

两个日期的差,注意是前减后

单位是填

now() 当前时间
  • 获得当前时间/日期/时间戳
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2023-05-04     |
+----------------+
1 row in set (0.00 sec)mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 20:37:49       |
+----------------+
1 row in set (0.00 sec)mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2023-05-04 20:37:55 |
+---------------------+
1 row in set (0.00 sec)
  • 日期之间的加减和距离

日期函数之中可以嵌套日期函数,比如需要输入当前日期时可以嵌套使用now()函数

datediff(date1,date2) 是用date1减去date2 ,如果小于则会显示负数。

mysql> select date_add('2023-05-04',interval 5 day);
+---------------------------------------+
| date_add('2023-05-04',interval 5 day) |
+---------------------------------------+
| 2023-05-09                            |
+---------------------------------------+mysql> select date_add(now(),interval 5 day);
+--------------------------------+
| date_add(now(),interval 5 day) |
+--------------------------------+
| 2023-05-09 20:40:53            |
+--------------------------------+mysql> select date_sub('2023-05-09',interval 5 day);
+---------------------------------------+
| date_sub('2023-05-09',interval 5 day) |
+---------------------------------------+
| 2023-05-04                            |
+---------------------------------------+mysql> select datediff('2023-05-04','2022-05-04');
+-------------------------------------+
| datediff('2023-05-04','2022-05-04') |
+-------------------------------------+
|                                 365 |
+-------------------------------------+
1 row in set (0.00 sec)mysql> select datediff('2022-05-04','2023-05-04');
+-------------------------------------+
| datediff('2022-05-04','2023-05-04') |
+-------------------------------------+
|                                -365 |
+-------------------------------------+
1 row in set (0.00 sec)
  • 查询在两分钟内发布的留言
mysql> select * from 表名 where date_add(时间对应名称, interval 2 minute) > now();

4.字符串函数

charset(str) 返回字符串字符集
concat(str1,str2,..) 连接str1,str2...成为一个
instr(string,str)

返回str在string中出现的位置

没有返回0

ucase(str) 转换成大写
lcase(str) 转换成小写
left(str,length) 从str的左边截取length个字符
length(str) str的长度
replace(str,search_str,replace_str)

在str中用replace_str

替换search_str

strcmp(str1,str2) 逐字符比较两字符串的大小
substring(str,pos,[length] ) 从str的pos位置截取length个字符

ltrim(string)

rtrim(string)

trim(string)

去除左边的空格

去除右边的空格

去除左和右的空格

 接下来是函数的具体使用

concat

mysql> select concat (' 姓名:',ename,' 工作:',job) from emp;
+----------------------------------------------+
| concat (' 姓名:',ename,' 工作:',job)       |
+----------------------------------------------+
|  姓名:SMITH 工作:CLERK                     |
|  姓名:ALLEN 工作:SALESMAN                  |
|  姓名:WARD 工作:SALESMAN                   |
|  姓名:JONES 工作:MANAGER                   |
|  姓名:MARTIN 工作:SALESMAN                 |
|  姓名:BLAKE 工作:MANAGER                   |
|  姓名:CLARK 工作:MANAGER                   |
|  姓名:SCOTT 工作:ANALYST                   |
|  姓名:KING 工作:PRESIDENT                  |
|  姓名:TURNER 工作:SALESMAN                 |
|  姓名:ADAMS 工作:CLERK                     |
|  姓名:JAMES 工作:CLERK                     |
|  姓名:FORD 工作:ANALYST                    |
|  姓名:MILLER 工作:CLERK                    |
+----------------------------------------------+

replace

注意replace只是修改了显示时的数据,并没有修改表内的数据。

mysql> select replace (job,'A','B') from emp;
+-----------------------+
| replace (job,'A','B') |
+-----------------------+
| CLERK                 |
| SBLESMBN              |
| SBLESMBN              |
| MBNBGER               |
| SBLESMBN              |
| MBNBGER               |
| MBNBGER               |
| BNBLYST               |
| PRESIDENT             |
| SBLESMBN              |
| CLERK                 |
| CLERK                 |
| BNBLYST               |
| CLERK                 |
+-----------------------+

substring

mysql> select substring(ename,2),ename from emp;
+--------------------+--------+
| substring(ename,2) | ename  |
+--------------------+--------+
| MITH               | SMITH  |
| LLEN               | ALLEN  |
| ARD                | WARD   |
| ONES               | JONES  |
| ARTIN              | MARTIN |
| LAKE               | BLAKE  |
| LARK               | CLARK  |
| COTT               | SCOTT  |
| ING                | KING   |
| URNER              | TURNER |
| DAMS               | ADAMS  |
| AMES               | JAMES  |
| ORD                | FORD   |
| ILLER              | MILLER |
+--------------------+--------+
14 rows in set (0.00 sec)mysql> select substring(ename,2,2),ename from emp;
+----------------------+--------+
| substring(ename,2,2) | ename  |
+----------------------+--------+
| MI                   | SMITH  |
| LL                   | ALLEN  |
| AR                   | WARD   |
| ON                   | JONES  |
| AR                   | MARTIN |
| LA                   | BLAKE  |
| LA                   | CLARK  |
| CO                   | SCOTT  |
| IN                   | KING   |
| UR                   | TURNER |
| DA                   | ADAMS  |
| AM                   | JAMES  |
| OR                   | FORD   |
| IL                   | MILLER |
+----------------------+--------+

以首字母大写,其余字母小写的方式显示员工的姓名

mysql> select concat(ucase(substring(ename,1,1)),lcase(substring(ename,2))) as name from emp;

mysql> select concat(ucase(substring(ename,1,1)),lcase(substring(ename,2))) as name from emp;
+--------+
| name   |
+--------+
| Smith  |
| Allen  |
| Ward   |
| Jones  |
| Martin |
| Blake  |
| Clark  |
| Scott  |
| King   |
| Turner |
| Adams  |
| James  |
| Ford   |
| Miller |
+--------+

5.数学函数

abs(number) 绝对值函数
bin(number) 十进制转二进制
hex(number) 十进制转16进制
conv(number,from_base,to_base) 进制转换
ceiling(number) 向上取整
floor(number) 向下取整
format(number,length)

number保留length位小数

四舍五入

rand()

返回一个浮点数

取值范围为[0.0,1.0)

mod(number,m) number%m

format

mysql> select format(12.345678,2);
+---------------------+
| format(12.345678,2) |
+---------------------+
| 12.35               |
+---------------------+mysql> select format(12.345678,6);
+---------------------+
| format(12.345678,6) |
+---------------------+
| 12.345678           |
+---------------------+

format属于最后一个环节,会改变数据格式为字符串,改变格式和精度,所以如果后续还有对数据的分析和筛选,不能先使用format


--> format之后找不到了
select deptno format(avg(sal),2) myavg,max(sal) from emp group by deptno having myavg>'2000';
Empty set(0.00 sec) 

rand()

mysql> select rand();
+---------------------+
| rand()              |
+---------------------+
| 0.15591199058658628 |
+---------------------+
1 row in set (0.01 sec)mysql> select rand();
+--------------------+
| rand()             |
+--------------------+
| 0.1622132008543361 |mysql> select format(rand(),2);
+------------------+
| format(rand(),2) |
+------------------+
| 0.34             |
+------------------+mysql> select format(rand(),3);
+------------------+
| format(rand(),3) |
+------------------+
| 0.120            |
+------------------+

6.其他函数

user() 查询当前用户
md5(str)

对一个字符串进行摘要,摘要后得到

一个32位的字符串

database() 显示当前正在使用的数据库
password() mysql使用该函数对用户加密
ifnull(val1,val2)

相当于三目操作符

如果val1是null 返回val2

如果val1不是null 返回val1

user()

在mysql中可以设置用户,用户会存放在user表中,对用户的管理,本质上就是对user表的增删查改。

md5

在某些表中我们需要存入用户的密码等私人信息,如果不对这些信息做处理,那么任意一个可以访问数据库的人都可以拿走这些信息,不安全。

name ->varchar(20)  password->char(64)

mysql> insert into my_user (name,password) values('张三',md5('123456'));

这样在 select * from my_user表时,出现的就不是123456而是32位的字符串。

所以当我们查表的时候也需要使用md5

mysql> select * from my_user where md5('123456')=password;

ifnull

使用年薪进行降序排序

因为每个人的奖金有可能是空,而数字+NULL也会被记录为NULL,所以就需要ifnull

select ename, sal*12+ifnull(comm,0) as '年薪' from EMP order by 年薪 desc;

MySQL--group by--聚合函数--内置函数--0415 22相关推荐

  1. python - - 函数 - - 内置函数和匿名函数

    目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...

  2. Python学习8 函数 匿名函数 内置函数

    转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...

  3. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  4. javaScript内置函数(内置函数,内置关键字)

    javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...

  5. 函数【七】高阶函数/内置函数

    python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...

  6. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  7. Python函数内置函数

    [函数定义]:将实现某个独立功能的代码组合在一起,命一个名字,再需要使用这段代码时通过所命的名字来使用,就叫做函数 使用函数的好处: 1.将代码模块化(升级或修改某一个功能时只更新相应函数即可) 2. ...

  8. Go进阶(4): string接口函数+时间接口函数+内置函数+错误处理

    1. string接口函数 len():内建函数,返回字符串/数组的长度,按字节(UTF-):例如,ascii字符占一个字节,汉字占三个字节: r:=[]rune(str):字符串遍历函数,同时可以处 ...

  9. pythopn 函数(内置函数)

    内置函数(Py3.5) 重要的内置函数:1. filter(function, sequence)# 描述:filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. ...

  10. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

最新文章

  1. 虚拟化VMware之存储与虚拟机主机管理(1)
  2. 我用Python分析了“青你2”漂亮小姐姐的颜值,结果真香了!
  3. 【Tools】Visual Studio 2019专业版下载和安装
  4. 可执行文件添加快捷方式_如何停止Windows向快捷方式文件名添加“-快捷方式”...
  5. HTML5 CANVAS 弹幕插件
  6. C++中内存分配方式、空指针及野指针的区别
  7. 矩阵运算_Eigen使用_基本数据类型
  8. paip.调试js 查看元素事件以及事件断点
  9. 商城小程序项目完整源码(微信小程序)
  10. XILINX FPGA数字信号处理——8、FIR滤波器和IIR滤波器原理及实现
  11. emu8086 寻址方式
  12. 视频批量消重 短视频解析去水印在线
  13. 谷歌浏览器安装xpath插件流程
  14. 这 9 个 Java 开源项目 yyds
  15. 苹果的widget抄袭android,并非致敬!苹果解释iOS 14“桌面小工具”细节:和Android很不一样...
  16. IMP-00003 ORA-00942 IMP-00023 IMP-00000
  17. 阿里巴巴Java开发手册及Java代码规约扫描eclipse插件
  18. Win10 盘符更改后需要修改的
  19. BP神经网络原理及在Matlab中的应用
  20. Ubuntu系统进行复制粘贴文件显示没有权限的解决办法

热门文章

  1. mysql 分区的作用_MySQL分区的优点
  2. git连接远程仓库步骤完善版
  3. matlab控制参考文献,SPWM的控制的系统文献综述
  4. Python解码(解密)函数decode
  5. spark3.3.1通过hbase-connectors连接CDH6.3.2自带hbase
  6. Kali 工具系列【4】深度信息挖掘工具Dmitry使用技巧
  7. 从linux中恢复数据库,linux中mysql数据库的备份与恢复
  8. php找出字符串不同地方,PHP中比较两个字符串找出第一个不同字符位置例子
  9. PS切片时,如何选择图片保存格式
  10. RedisInsight:Redis监控工具部署(linux)