如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
文章目录
- 聚合函数
- group by子句的使用
- 实战OJ
- 日期函数
- 字符串函数
- 数学函数
- 其它函数
聚合函数
| 函数 | 说明 |
|---|---|
| COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
| SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
| AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
| MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
| MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
- 这个是查询的结果

- 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)
- 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)
- AVG
统计平均总分

select avg(chinese + math + english) 平均分 from exam_result;
+--------------------+
| 平均分 |
+--------------------+
| 221.42857142857142 |
+--------------------+
1 row in set (0.00 sec)
- 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)
相关文章:
如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
文章目录 聚合函数group by子句的使用实战OJ日期函数字符串函数数学函数其它函数 聚合函数 函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值&…...
AutoGen :使用 Swarm 构建自治型多智能体团队
👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!👉👉👉 有意愿请私信!!!AutoGen 的 AgentChat 模块提供了一种强大的方法来构建多智能体协作系统。 在之前的文章中,我们探讨了…...
RK3568平台设备树文件功能解析(鸿蒙系统篇)
鸿蒙设备树驱动修改时候发现目录下有很多的rk3568 的设备树,由于对这些设备树功能不太熟悉,所以索性就整理一下不同设备树的功能 rk3568-evb1-ddr4-v10.dts rk3568-evb4-lp3-v10.dts rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts …...
k8s-coredns-CrashLoopBackOff 工作不正常
本文作者: 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,分析工具 1,Systrace新UI网站 Perfetto UI 2,Systrace抓取 可通过android sdk中自带的systrace抓取,路径一般如下,..\AppData\Local\Android\Sdk\platform-tools, 另外需要安装python2.7,…...
Unity导出WebGL,无法显示中文
问题:中文无法显示 默认字体无法显示中文 在编辑器中设置了中文和英文的按钮,中文按钮无法显示 导出后无法显示中文 解决办法: 自己添加字体,导入项目,并引用 示例 下载一个字体文件,这里使用的阿里…...
oracle事务的组成
1)数据库事务由以下的部分组成: 一个或多个DML 语句 ; 一个 DDL(Data Definition Language – 数据定义语言) 语句; 一个 DCL(Data Control Language – 数据控制语言)语句; 2)事务的执行开始: 以第一个 DML 语句的执行作为开始 ,…...
【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】
如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南 注册并获取硅基流动秘钥OpenWebUI中使用函数配置自定义模型-提示词配置效果验证 ) FLUX绘画是一种强大的AI绘图工具,本文将详细介绍如何在OpenWebUI中集成并使用FLUX绘画功能,…...
QT 磁盘文件 教程04-创建目录、删除目录、遍历目录
【1】新建目录 bool CreateDir(QString name){QString fileName name ;QDir dir(fileName);if (dir.isEmpty()) {dir.mkdir(fileName);return true;}else{qDebug()<<"文件夹已存在";return false;} } 【2】删除目录 bool DeleteDir(QString fileName){if (…...
Event driven agentic document workflows 笔记 - 2
代理文档工作流(ADW)- 课程笔记 Agentic Document Workflows (ADW) 1. 课程目标 介绍 代理文档工作流(ADW) 背后的核心概念,包括: RAG(检索增强生成)代理工作流 探讨如何利用 事件…...
Facebook 如何影响元宇宙的发展趋势
Facebook 如何影响元宇宙的发展趋势 引言 元宇宙(Metaverse)这个概念,曾经只存在于科幻小说中,如今正逐渐成为现实。它是一个由多个 3D 虚拟世界组成的网络,用户可以在其中进行社交、游戏、工作等活动。Facebook&…...
1.5.7 掌握Scala内建控制结构 - 变量作用域
本次实战深入理解了Scala中变量作用域的概念,通过两个任务演示了作用域的基本规则。在任务1中,我们创建了一个名为ScopeDemo01的对象,展示了内部作用域能够访问外部作用域的变量。通过在if语句块中访问在外部定义的message变量,我…...
RAID磁盘阵列管理
一. 什么是RAID RAID是英文Redundant Array of Independent Disks的缩写,中文翻译过来就是“独立冗余磁盘阵列”。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘&#…...
利用ffmpeg库实现音频AAC编解码
AAC(Advanced Audio Coding)是一种音频编码技术,出现于1997年,基于MPEG-2的音频编码技术。AAC具有高效的数据压缩能力和较高的音质,适用于各种音频应用场景。例如,在智能设备中,AAC技术被广泛…...
微博ip属地不发微博会不会变
随着社交媒体的普及,微博作为其中的佼佼者,一直备受关注。而且微博上线了显示用户IP属地的功能,这一功能旨在减少冒充热点事件当事人、恶意造谣、蹭流量等不良行为,确保传播内容的真实性和透明度。然而,这也引发了一些…...
appium之Toast元素识别
Appium之Toast元素识别教程与实例 一、Toast简介 Toast是Android系统中的轻量级消息提示框,以浮动形式短暂显示(通常2-3秒),无法被点击且不会获取焦点。常见于登录失败、操作提示等场景,如“密码错误”或“网络异常”。…...
「JavaScript深入」WebSocket:高效的双向实时通信技术
WebSocket WebSocket 的特点1. 全双工通信2. 持久连接3. 低延迟4. 二进制和文本支持5. 连接管理6. 二进制数据传输 WebSocket 协议详解1. 握手过程2. 数据帧结构 WebSocket 的实现服务器端实现(Node.js ws库)1. 基础服务器2. 广播功能实现3. 心跳机制客…...
C#从入门到精通(1)
目录 第一章 C#与VS介绍 第二章 第一个C#程序 (1)C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 (2)程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…...
配置阿里云yum源
配置阿里云yum源 修改默认的yum仓库,把原有的移动到创建的目录里(踢出国外的yum源) # 切换到/ect/yum.repos.d/目录下 cd /etc/yum.repos.d/ # 新建repo目录 mkdir repo # 把原有的移动到创建的目录里 mv ./*.repo ./repo/配置yum源 # 找到…...
头歌实训--Pandas合并数据集--第3关:案例:美国各州的统计数据
任务描述 本关为练习关卡,请按照编程要求完成任务,获取美国各州2010年的人口密度排名。 import pandas as pd import numpy as npdef task3():#********** Begin **********##读取三个csv文件pop pd.DataFrame(pd.read_csv("./step3/state-popula…...
仿“东方甄选”直播商城小程序运营平台
在公域直播流量红利趋于饱和、流量成本大幅攀升的当下,私域直播为企业开辟了新的流量聚集和转化渠道,特别是对于那些希望在私域流量领域取得突破的品牌商家来说,直播场景以其独特的高频互动氛围,相比其他运营方式,展现…...
CentOS 7.9 安装 Python 3.10 详细步骤及常见问题解决
一、环境准备与依赖安装 更新系统与开发工具 sudo yum update -y sudo yum groupinstall "Development Tools" -y sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel \ readline-devel tk-devel libffi-devel gdbm-devel db4-de…...
ORACLE 19.8版本数据库环境EXPDP导数据的报错处理
近期用户在做EXPDP导出时,报错异常termination终止;EXPDP本身是简单的功能并且这个环境也是经常做导出的,到底是什么原因导致了这个问题呢? 导出脚本报错: 分析导出日志,当时系统资源充足但是进程启动失败,…...
LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(下)
前面两节课程分别给大家介绍了“控制器连接、定时获取轴状态、轴坐标、控制器型号、轴参数设置、IO控制、Basic文件下载”(详情点击→LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(上)&#…...
Ubuntu Qt: no service found for - “org.qt-project.qt.mediaplayer“
1、前言 在一次项目过程中,因项目需求,需要将windows开发的Qt项目迁移到ubuntu系统中,且在某个功能项中需要播放音频,在windows系统中能够正常运行,但在ubuntu系统中却显示defaultServiceProvider::requestService(): …...
C++ 各种map对比
文章目录 特点比较1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map(SGI STL 扩展) C 示例代码代码解释 特点比较 1. std::map 底层实现:基于红黑树(一种自平衡的二叉搜索树)…...
纯内网环境安装1Panel面板与商店应用
文章目录 前序准备开始联网机器配置1Panel配置安装所有离线需要的应用导出Docker镜像导出1Panel配置 离线机器配置安装1Panel覆盖配置导入容器镜像重建应用 关于Jar包的运行 前序 之前一篇文章讲解了如何在内网环境下安装1Panel并操作商店应用安装应用程序,但是在一…...
软件工程面试题(三)
1.简单介绍下java?Spring的AOP,IOC的讲述 对struts2的了解,1,2的比较 xml的了解 J2ee的webserviced的协议? Spring AOP:代理机制 Spring提供的自动代理机制 Spring的IoC来实组件之间的依赖关系注入, 使控制层及…...
【 C++】构造函数和成员函数
详细探讨 C 中的构造函数和成员函数(方法),并通过代码示例进行说明。 1. 构造函数 (Constructors) 目的: 构造函数是一种特殊的成员函数,其主要目的是在创建对象时初始化对象的数据成员。名称: 构造函数的…...
OpenCV计算摄影学(22)将输入的彩色图像转换为两种风格的铅笔素描效果函数pencilSketch()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 铅笔风格非写实线描图。 该函数通过图像处理技术将输入的彩色图像转换为两种风格的铅笔素描效果: dst1:炭笔效果的灰度图…...
