MySQL函数
MySQL 函数
详细见官方参考手册 参考手册
1、常见函数
常见函数汇总练习
-- 数学运算函数
SELECT ABS(-8); -- 绝对值 /8/
SELECT CEILING(-1.2) ;-- 向上取整 /-1/
SELECT FLOOR(9.4);-- 向下取整 /9/
SELECT RAND(); -- 返回一个0~1之间的随机数
SELECT SIGN(0); -- 判断一个数的符号,0 返回0 负数返回-1 正数返回1 /0/
-- 字符串函数(字符串起始位置为1)
SELECT CHAR_LENGTH('无关风月'); -- 字符串长度 /4/
SELECT CONCAT('无','关','风','月'); -- 拼接字符串 /无关风月/
SELECT INSERT('wgfy,我题序等你回',1,4,'无关风月');
-- 插入,替换(1,4代表从1位置开始替换长度为4) /无关风月,我题序等你回/
SELECT LOWER('Viper'); -- 全部小写 /viper/
SELECT UPPER('viper'); -- 全部大写 /VIPER/
SELECT INSTR('viper','a'); -- 返回第一次出现的子串的索引,若没有则返回0 /0/
SELECT REPLACE('永和XX,岁在癸丑','XX','九年'); -- 替换出现的指定字符串 /永和九年,岁在癸丑/
SELECT SUBSTR('永和九年,岁在癸丑', 6, 100);
-- 返回指定的子字符串(源字符串,截取的位置,截取的长度)截取长度可以超出字符串长度 /岁在癸丑/
SELECT REVERSE('会于会稽山阴之兰亭'); -- 反转 /亭兰之阴山稽会于会/
-- 时间和日期函数(记住!)
SELECT CURRENT_DATE(); -- 获取当前日期(年月日)
SELECT CURDATE(); -- 获取当前日期简写
SELECT NOW(); -- 获取当前的时间(年月日时分秒)
SELECT LOCALTIME(); -- 获取本地时间
SELECT SYSDATE(); -- 获取系统时间
SELECT YEAR(NOW()); -- 年
SELECT MONTH(NOW()); -- 月
SELECT DAY(NOW()); -- 日
SELECT HOUR(NOW()); -- 时
SELECT MINUTE(NOW()); -- 分
SELECT SECOND(NOW()); -- 秒
-- 系统函数
SELECT SYSTEM_USER();
SELECT USER();
SELECT VERSION();
2、聚合函数及分组过滤
函数
函数 | 描述 |
---|---|
count() |
计数 |
sum() |
求和 |
avg() |
平均值 |
max() |
最大值 |
min() |
最小值 |
聚合函数练习(基于school1数据库)
因为最后一个练习是查询不同课程的分,所以要用group by 进行分组
因为要过滤掉均分在60分以下的科目,所以要用having
-- 聚合函数
-- 用于统计表中数据
-- 统计表中记录数(行数)
-- 语法是:COUNT()
-- 1.COUNT(字段名) 会忽略所有的null值(想查询一个表中有多少个记录,就使用这个)
SELECT COUNT(studentname) FROM student; -- 9
-- 2.COUNT(*) 不会忽略所有的null值 本质是 计算行数
SELECT COUNT(*) FROM student;
-- 3.COUNT(1) 不会忽略所有的null值 本质是 计算行数
SELECT COUNT(1) FROM student;
SELECT SUM(studentresult) AS '总和' FROM result; -- 1829
SELECT AVG(studentresult) AS '平均分' FROM result; -- 76.2083
SELECT MAX(studentresult) AS '最高分' FROM result; -- 100
SELECT MIN(studentresult) AS '最低分' FROM result; -- 45
-- 查询不同课程(所以用 group by)的平均分,最高分,最低分
-- 练习:查询不同课程的 平均分,最高分,最低分(过滤掉均分在60分以下的科目)
SELECT sub.subjectname AS '课程',
AVG(res.studentresult) AS '平均分',
MAX(res.studentresult) AS '最高分',
MIN(res.studentresult) AS '最低分'
FROM `result` res
INNER JOIN `subject` sub
ON res.`subjectno`=sub.`subjectno`
GROUP BY res.`subjectno` -- 制定结果按照 `result` 表的 `subjectno`字段来分组
HAVING AVG(res.studentresult) >=60;
-- 过滤分组的记录必须满足的次要条件为 过滤掉均分在60分以下的科目
如下图,均分在60以下的科目被过滤掉了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律