如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析

news2025/3/22 5:19:07

文章目录

  • 聚合函数
  • group by子句的使用
  • 实战OJ
  • 日期函数
  • 字符串函数
  • 数学函数
  • 其它函数

聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义
  • 这个是查询的结果
    在这里插入图片描述
  1. COUNT
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
-- 使用 * 做统计,不受 NULL 影响 
count(*) from students;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)
-- 使用表达式做统计 
select count(1) from students;
+----------+
| count(1) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)
统计班级收集的 qq 号有多少
-- NULL 不会计入结果 
select count(qq) from students;
+-----------+
| count(qq) |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)
统计本次考试的数学成绩分数个数
--COUNT(math) 统计的是全部成绩
 select count(math) from exam_result;
+-------------+
| count(math) |
+-------------+
|           7 |
+-------------+
1 row in set (0.00 sec)
  1. SUM
    统计数学成绩总分
    在这里插入图片描述
    在这里插入图片描述
select sum(math) from exam_result;
+-----------+
| sum(math) |
+-----------+
|       583 |
+-----------+
1 row in set (0.00 sec)
-- 不及格 < 60 的总分,没有结果,返回 NULL SELECT SUM(math) FROM exam_result WHERE math< 60;
 select sum(math) from exam_result where math < 60;
+-----------+
| sum(math) |
+-----------+
|      NULL |
+-----------+
1 row in set (0.00 sec)
  1. AVG
    统计平均总分
    在这里插入图片描述
select avg(chinese + math + english) 平均分 from exam_result;
+--------------------+
| 平均分             |
+--------------------+
| 221.42857142857142 |
+--------------------+
1 row in set (0.00 sec)
  1. MAX
    返回英语最高分
    在这里插入图片描述
select MAX(english) from exam_result;
+--------------+
| MAX(english) |
+--------------+
|           90 |
+--------------+
1 row in set (0.00 sec)

返回 > 70 分以上的数学最低分
在这里插入图片描述

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

group by子句的使用

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

语法:select column1, column2, .. from table group by column;
案例:

  • 准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
    • EMP员工表
    • DEPT部门表
    • SALGRADE工资等级表
  • 如何显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from EMP group by deptno; 
  • 显示每个部门的每种岗位的平均工资和最低工资
 select avg(sal),min(sal),job, deptno from EMP group by deptno, job; 
  • 显示平均工资低于2000的部门和它的平均工资
    • 统计各个部门的平均工资
select avg(sal) from EMP group by deptno
    • having和group by配合使用,对group by结果进行过滤
select avg(sal) as myavg from EMP group by deptno having myavg<2000; 
--having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。

实战OJ

牛客:批量插入数据
牛客:找出所有员工当前薪水salary情况
牛客:查找最晚入职员工的所有信息
牛客:查找入职员工时间排名倒数第三的员工所有信息
查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

日期函数

在这里插入图片描述

  • 获得年月日:
    在这里插入图片描述
select current_date();
+----------------+
| current_date() |
+----------------+
| 2025-03-21     |
+----------------+
1 row in set (0.00 sec)
  • 获得时分秒:
    在这里插入图片描述
select current_time();
+----------------+
| current_time() |
+----------------+
| 09:21:46       |
+----------------+
1 row in set (0.00 sec)
  • 获得时间戳:
    在这里插入图片描述
select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2025-03-21 09:22:22 |
+---------------------+
1 row in set (0.00 sec)
  • 在日期的基础上加日期:
    在这里插入图片描述
select date_add('2017-10-28',interval 10 day);
+----------------------------------------+
| date_add('2017-10-28',interval 10 day) |
+----------------------------------------+
| 2017-11-07                             |
+----------------------------------------+
1 row in set (0.04 sec)
  • 在日期的基础上减去时间:
    在这里插入图片描述
select date_sub('2017-10-28',interval 10 day);
+----------------------------------------+
| date_sub('2017-10-28',interval 10 day) |
+----------------------------------------+
| 2017-10-18                             |
+----------------------------------------+
1 row in set (0.00 sec)
  • 计算两个日期之间相差多少天:
    在这里插入图片描述
mysql> select datediff('2017-10-10', '2016-9-1');
+------------------------------------+
| datediff('2017-10-10', '2016-9-1') |
+------------------------------------+
|                                404 |
+------------------------------------+
1 row in set (0.00 sec)

案例-1:

  • 创建一张表,记录生日
create table tmp(
 id int primary key auto_increment,
 birthday date
);
  • 添加当前日期:
mysql> insert into tmp(birthday) values(current_date()); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from tmp;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2025-03-21 |
+----+------------+
1 row in set (0.00 sec)

在这里插入图片描述

案例-2:

  • 创建一个留言表
mysql> create table msg (
 id int primary key auto_increment,
 content varchar(30) not null,
 sendtime datetime
 );

插入数据

mysql>  insert into msg(content,sendtime) values('hello1', now());
Query OK, 1 row affected (0.01 sec)

mysql>  insert into msg(content,sendtime) values('hello2', now());
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

  • 显示所有留言信息,发布日期只显示日期,不用显示时间
select content,date(sendtime) from msg;
  • 请查询在2分钟内发布的帖子
select * from msg where date_add(sendtime, interval 2 minute) > now();
理解:
------------------------------|-----------|-------------|------------------
                           初始时间     now()       初始时间+2min           

字符串函数

在这里插入图片描述
案例:

  • 获取emp表的ename列的字符集
select charset(ename) from EMP;
  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from student;
  • 求学生表中学生姓名占用的字节数
select length(name), name from student;

注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

  • 将EMP表中所有名字中有S的替换成’上海’
select replace(ename, 'S', '上海') ,ename from EMP;
  • 截取EMP表中ename字段的第二个到第三个字符
select substring(ename, 2, 2), ename from EMP;
  • 以首字母小写的方式显示所有员工的姓名
select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from EMP;

数学函数

在这里插入图片描述

  • 绝对值
    在这里插入图片描述
select abs(-100.2);
  • 向上取整
    在这里插入图片描述
select ceiling(23.04);
  • 向下取整
    在这里插入图片描述
select floor(23.7);
  • 保留2位小数位数(小数四舍五入)

在这里插入图片描述

select format(12.3456, 2);
  • 产生随机数
    在这里插入图片描述
select rand();

获取0 ~ 99的随机数
在这里插入图片描述

其它函数

  • user() 查询当前用户
select user();
  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
select md5('admin')
+----------------------------------+
| md5('admin')                     |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
  • database()显示当前正在使用的数据库
select database();
  • password()函数,MySQL数据库使用该函数对用户加密
select password('root');
 +-------------------------------------------+
 | password('root')                          |
 +-------------------------------------------+
 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
 +-------------------------------------------+
  • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
select ifnull('abc', '123');
   +----------------------+
   | ifnull('abc', '123') |
   +----------------------+
   | abc                 |
   +----------------------+
   1 row in set (0.01 sec)
   
select ifnull(null, '123');
   +---------------------+
   | ifnull(null, '123') |
   +---------------------+
   | 123                 |
   +---------------------+
   1 row in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s-coredns-CrashLoopBackOff 工作不正常

本文作者&#xff1a; slience_me 问题描述 # 问题描述 # rootk8s-node1:/home/slienceme# kubectl get pods --all-namespaces # NAMESPACE NAME READY STATUS RESTARTS AGE # kube-flannel kube-flannel-ds-66bcs …

【Android性能】Systrace分析

1&#xff0c;分析工具 1&#xff0c;Systrace新UI网站 Perfetto UI 2&#xff0c;Systrace抓取 可通过android sdk中自带的systrace抓取&#xff0c;路径一般如下&#xff0c;..\AppData\Local\Android\Sdk\platform-tools&#xff0c; 另外需要安装python2.7&#xff0c;…

Unity导出WebGL,无法显示中文

问题&#xff1a;中文无法显示 默认字体无法显示中文 在编辑器中设置了中文和英文的按钮&#xff0c;中文按钮无法显示 导出后无法显示中文 解决办法&#xff1a; 自己添加字体&#xff0c;导入项目&#xff0c;并引用 示例 下载一个字体文件&#xff0c;这里使用的阿里…

oracle事务的组成

1)数据库事务由以下的部分组成: 一个或多个DML 语句 ; 一个 DDL(Data Definition Language – 数据定义语言) 语句&#xff1b; 一个 DCL(Data Control Language – 数据控制语言)语句&#xff1b; 2)事务的执行开始&#xff1a; 以第一个 DML 语句的执行作为开始 &#xff0c;…

【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】

如何在OpenWebUI中使用FLUX绘画&#xff1a;基于硅基流动免费API的完整指南 注册并获取硅基流动秘钥OpenWebUI中使用函数配置自定义模型-提示词配置效果验证 ) FLUX绘画是一种强大的AI绘图工具&#xff0c;本文将详细介绍如何在OpenWebUI中集成并使用FLUX绘画功能&#xff0c;…

Facebook 如何影响元宇宙的发展趋势

Facebook 如何影响元宇宙的发展趋势 引言 元宇宙&#xff08;Metaverse&#xff09;这个概念&#xff0c;曾经只存在于科幻小说中&#xff0c;如今正逐渐成为现实。它是一个由多个 3D 虚拟世界组成的网络&#xff0c;用户可以在其中进行社交、游戏、工作等活动。Facebook&…

1.5.7 掌握Scala内建控制结构 - 变量作用域

本次实战深入理解了Scala中变量作用域的概念&#xff0c;通过两个任务演示了作用域的基本规则。在任务1中&#xff0c;我们创建了一个名为ScopeDemo01的对象&#xff0c;展示了内部作用域能够访问外部作用域的变量。通过在if语句块中访问在外部定义的message变量&#xff0c;我…

RAID磁盘阵列管理

一. 什么是RAID RAID是英文Redundant Array of Independent Disks的缩写&#xff0c;中文翻译过来就是“独立冗余磁盘阵列”。简单的说&#xff0c;RAID是一种把多块独立的硬盘&#xff08;物理硬盘&#xff09;按不同的方式组合起来形成一个硬盘组&#xff08;逻辑硬盘&#…

微博ip属地不发微博会不会变

随着社交媒体的普及&#xff0c;微博作为其中的佼佼者&#xff0c;一直备受关注。而且微博上线了显示用户IP属地的功能&#xff0c;这一功能旨在减少冒充热点事件当事人、恶意造谣、蹭流量等不良行为&#xff0c;确保传播内容的真实性和透明度。然而&#xff0c;这也引发了一些…

C#从入门到精通(1)

目录 第一章 C#与VS介绍 第二章 第一个C#程序 &#xff08;1&#xff09;C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 &#xff08;2&#xff09;程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下&#xff0c;私域直播为企业开辟了新的流量聚集和转化渠道&#xff0c;特别是对于那些希望在私域流量领域取得突破的品牌商家来说&#xff0c;直播场景以其独特的高频互动氛围&#xff0c;相比其他运营方式&#xff0c;展现…

ORACLE 19.8版本数据库环境EXPDP导数据的报错处理

近期用户在做EXPDP导出时&#xff0c;报错异常termination终止;EXPDP本身是简单的功能并且这个环境也是经常做导出的&#xff0c;到底是什么原因导致了这个问题呢&#xff1f; 导出脚本报错&#xff1a; 分析导出日志&#xff0c;当时系统资源充足但是进程启动失败&#xff0c;…

LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(下)

前面两节课程分别给大家介绍了“控制器连接、定时获取轴状态、轴坐标、控制器型号、轴参数设置、IO控制、Basic文件下载”&#xff08;详情点击→LabVIEW运动控制&#xff08;二&#xff09;&#xff1a;EtherCAT运动控制器的多轴示教加工应用&#xff08;上&#xff09;&#…

纯内网环境安装1Panel面板与商店应用

文章目录 前序准备开始联网机器配置1Panel配置安装所有离线需要的应用导出Docker镜像导出1Panel配置 离线机器配置安装1Panel覆盖配置导入容器镜像重建应用 关于Jar包的运行 前序 之前一篇文章讲解了如何在内网环境下安装1Panel并操作商店应用安装应用程序&#xff0c;但是在一…

OpenCV计算摄影学(22)将输入的彩色图像转换为两种风格的铅笔素描效果函数pencilSketch()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 铅笔风格非写实线描图。 该函数通过图像处理技术将输入的彩色图像转换为两种风格的铅笔素描效果&#xff1a; dst1&#xff1a;炭笔效果的灰度图…

影响单模光纤耦合效率的分析

影响单模光纤耦合效率的因素 如果想使单模光纤的耦合效率最高&#xff0c;入射光束需要满足以下条件&#xff1a; &#xff08;1&#xff09;入射光束接近高斯光&#xff1b; &#xff08;2&#xff09;入射光束从光纤端面正入射&#xff1b; &#xff08;3&#xff09;入射…

windows+ragflow+deepseek实战之一excel表查询

ragflows平台部署参考文章 Win10系统Docker+DeepSeek+ragflow搭建本地知识库 ragflow通过python实现参考这篇文章 ragflow通过python实现 文章目录 背景效果1、准备数据2、创建知识库3、上传数据并解析4、新建聊天助理5、测试会话背景 前面已经基于Win10系统Docker+DeepSeek+…

从“不敢买大”到“按墙选屏”,海信电视如何凭百吋重构客厅?

电视买小了&#xff0c;成为茜茜新房入住后最大的遗憾。 新房装修的时候&#xff0c;茜茜担心电视买大了眼睛看着累&#xff0c;因此把尺寸选在了65吋。结果入住后&#xff0c;孩子看动画片嚷着“画面太小”&#xff0c;老公看球赛吐槽“看不清球员号码”&#xff0c;全家追剧…

ABAP 长文本编辑器

加个屏幕 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------…

MATLAB 调用arduino uno

为了授课&#xff0c;必须重新把arduino用上。 采用MATLAB编码&#xff0c;可以简化相关程序授课部分 1 安装包 MATLAB Support Package for Arduino Hardware - File Exchange - MATLAB Central (mathworks.com) 需要这个插件。 当然也可下载simulink的模块&#xff0c;但…