SQL 函数记不住?一张表全收好(高频 18 个,覆盖 80% 场景) 做了十年数据分析SQL 函数我天天用但说真的——没人能全记住。真要用的时候都是翻笔记。所以这篇就是我给自己、也是给你整理的高频函数速查表按聚合 / 字符串 / 日期 / 条件 / 数值分成 5 组每个给一句话用途 最常用写法。建议先收藏写 SQL 时对着抄用着用着就熟了。「SQL 从入门到精通」系列持续更新中关注我不迷路每篇都是实战干货——踩坑、速查、基础、进阶全覆盖。⚠️ 小提示MySQL / Oracle / PostgreSQL 在函数名上略有差异文末标了同一句在不同库可能要微调。 练习表复制即可建表随时练手本系列所有文章都用这 4 张表建一次就能跟着全系列练。DROPTABLEIFEXISTS员工表;CREATETABLE员工表(员工idINTPRIMARYKEY,姓名VARCHAR(20),部门VARCHAR(20),工资DECIMAL(10,2),邮箱VARCHAR(50),手机VARCHAR(20),入职日期DATE);INSERTINTO员工表(员工id,姓名,部门,工资,邮箱,手机,入职日期)VALUES(1,张三,技术部,9000.00,zhangsandemo.com,13800000001,2019-03-01),(2,李四,技术部,9000.00,lisidemo.com,13800000002,2020-07-15),(3,王五,销售部,9200.00,wangwudemo.com,13800000003,2018-01-10),(4,赵六,销售部,9200.00,zhaoliudemo.com,13800000004,2021-05-20);DROPTABLEIFEXISTS订单表;CREATETABLE订单表(订单idINTPRIMARYKEY,员工idINT,订单金额DECIMAL(10,2),下单时间DATETIME,付款时间DATETIME,状态VARCHAR(20));INSERTINTO订单表(订单id,员工id,订单金额,下单时间,付款时间,状态)VALUES(101,1,3000.00,2026-01-10 10:00:00,2026-01-10 10:05:00,已付款),(102,1,2500.00,2026-02-15 14:00:00,2026-02-15 14:10:00,已付款),(103,3,4000.00,2026-03-20 09:30:00,2026-03-20 09:40:00,已付款),(104,2,1500.00,2026-04-05 16:00:00,NULL,待付款);DROPTABLEIFEXISTS用户表;CREATETABLE用户表(用户idINTPRIMARYKEY,姓名VARCHAR(20),手机VARCHAR(20),邮箱VARCHAR(50),地址VARCHAR(100));INSERTINTO用户表(用户id,姓名,手机,邮箱,地址)VALUES(1,张三,13900000001,zhangsandemo.com,北京市朝阳区),(2,李四,13900000002,lisidemo.com,上海市浦东新区),(3,王五,13900000003,wangwudemo.com,广州市天河区);DROPTABLEIFEXISTS任务表;CREATETABLE任务表(任务idINTPRIMARYKEY,员工idINT,备注VARCHAR(100),状态VARCHAR(20));INSERTINTO任务表(任务id,员工id,备注,状态)VALUES(1,1,完成需求评审,已完成),(2,2,NULL,进行中),(3,3,修复线上bug,已完成),(4,4,NULL,待分配);一、聚合函数分组统计必用函数用途示例COUNT(*)数行数含 NULL 行SELECT COUNT(*) FROM 员工表COUNT(列)数某列非 NULL值SELECT COUNT(邮箱) FROM 员工表SUM(列)求和SELECT SUM(工资) FROM 员工表AVG(列)平均值忽略 NULLSELECT AVG(工资) FROM 员工表MAX(列)/MIN(列)最大 / 最小值SELECT MAX(工资) FROM 员工表踩坑提醒AVG和COUNT(列)都跳过 NULL算占比时容易算错先想清楚要不要把 NULL 算进去。二、字符串函数清洗文本用得最多函数用途示例CONCAT(a,b)拼接字符串SELECT CONCAT(姓名,部门) FROM 员工表SUBSTR(s,n,len)截取子串Oracle/PG 用SUBSTRINGSELECT SUBSTR(手机,1,3) FROM 用户表LENGTH(s)字符串长度SELECT LENGTH(姓名) FROM 员工表TRIM(s)去首尾空格SELECT TRIM(姓名) FROM 员工表REPLACE(s,a,b)把 a 替换成 bSELECT REPLACE(地址,市,) FROM 用户表UPPER(s)/LOWER(s)转大写 / 小写SELECT UPPER(姓名) FROM 员工表经验脏数据八成是空格和大小写搞的鬼进库前TRIMUPPER先洗一遍后面少踩坑。三、日期函数按时间统计绕不开函数用途示例MySQL 写法NOW()/CURDATE()当前时间 / 今天SELECT CURDATE()DATE(时间列)取日期部分SELECT DATE(下单时间) FROM 订单表DATEDIFF(a,b)两日期相差天数SELECT DATEDIFF(付款时间,下单时间) FROM 订单表DATE_FORMAT(d,%Y-%m)格式化MySQLSELECT DATE_FORMAT(下单时间,%Y-%m) FROM 订单表差异Oracle 用SYSDATE和TO_CHAR(d,YYYY-MM)PostgreSQL 用CURRENT_DATE和TO_CHAR(d,YYYY-MM)。换库记得改写法。四、条件函数分组打标签神器函数用途示例CASE WHEN ... THEN ... ELSE ... END多条件分支最常用SELECT CASE WHEN 工资10000 THEN 高 ELSE 普通 END FROM 员工表IF(条件,真,假)二选一MySQLSELECT IF(工资10000,高,普通) FROM 员工表COALESCE(a,b,...)返回第一个非 NULL 值SELECT COALESCE(手机,邮箱,无) FROM 用户表CASE WHEN是万能的所有分层 / 打标 / 区间需求都靠它务必练熟。五、数值函数算账用函数用途示例ROUND(x,n)四舍五入保留 n 位SELECT ROUND(工资/30,1) FROM 员工表ABS(x)绝对值SELECT ABS(工资-10000) FROM 员工表CEIL(x)/FLOOR(x)向上 / 向下取整SELECT CEIL(订单金额/1000) FROM 订单表 站队时间CASE WHEN vs IF你平时写哪个我站CASE WHEN——原因很简单IF 只有 MySQL 能用。当年我从 MySQL 迁移到 Oracle几百个IF(条件,a,b)全得改成CASE WHEN ... END改了整整一周改完眼睛都花了 。如果你只用 MySQLIF 确实写着短但万一以后换 Oracle/PostgreSQL/SQL Server全得重来。你呢评论区站个队A 队CASE WHEN 党跨库无忧B 队IF 党MySQL 专属写着爽C 队我两个都用过有故事要说 文末签名栏 我是Hello_world12131十年数据分析经验。这篇有用的话点个赞 收藏顺便关注我——SQL 避坑、速查表、基础教程持续更新关注不迷路。系列目录SQL 从入门到精通 - 完整路线图建议收藏相关推荐新手学 SQL 最常踩的 3 个坑附避坑清单SQL 多表关联查询入门INNER / LEFT / RIGHT JOIN⏭️下篇预告《篇03_ORDER BY_GROUP BY_HAVING_排序分组筛选》——基础篇第三弹搞定查询的最后三块拼图

相关新闻

最新新闻

AI奉承陷阱:技术根源、危害与构建诚实助手的工程实践

AI奉承陷阱:技术根源、危害与构建诚实助手的工程实践

你有没有想过,每天和你对话的AI助手,可能正在潜移默化地“讨好”你?当你问它“我写的代码怎么样”时,它大概率会回复“非常棒,逻辑清晰”,而不是“这里有个潜在的空指针异常”。这种看似无害的“阿谀奉承”…

2026/8/9 16:11:51
从毫秒到微秒:高并发系统延迟优化实战

从毫秒到微秒:高并发系统延迟优化实战

1. 延迟优化实战:从毫秒到微秒的性能突破在当今高并发的互联网应用中,延迟优化已经从"锦上添花"变成了"生死攸关"的技术指标。我最近刚完成一个高频交易系统的延迟优化项目,将核心链路从平均3毫秒降低到800微秒。这个过程…

2026/8/9 16:11:51
人机共生4.0:AI与人类协作的新范式

人机共生4.0:AI与人类协作的新范式

1. 人机共生4.0时代的产业图景 当AlphaGo击败李世石时,我们以为看到了人机关系的终极形态;当ChatGPT通过律师资格考试时,我们又重新定义了智能的边界。如今站在人机共生4.0的门槛上,科技公司正在编织一张远比我们想象中更复杂的协…

2026/8/9 16:11:51
知乎多账号轮发怎么做:限频、安全线与分组策略

知乎多账号轮发怎么做:限频、安全线与分组策略

知乎多账号轮发,真正要管的不是“今天还能不能继续发”,而是每个账号的节奏、草稿状态和恢复动作。 如果你把多账号只当成更多发布口,很快就会遇到 4031、重复草稿和日志混乱。更稳的做法通常是三件事先结构化:给每个账号设保守安…

2026/8/9 16:11:51
平台组和精确 targets 怎么选:多账号内容分发的路由策略

平台组和精确 targets 怎么选:多账号内容分发的路由策略

如果你在 OmniPost 里做多账号分发,最容易混淆的不是平台能力,而是“平台组”和精确 targets 到底该怎么用。 先说结论:平台组适合表达默认路由,targets 适合表达本次执行对象。 真正稳的做法不是二选一,而是“组负责…

2026/8/9 16:11:51
5分钟快速上手:使用unrpa提取Ren‘Py游戏资源完全指南

5分钟快速上手:使用unrpa提取Ren‘Py游戏资源完全指南

5分钟快速上手:使用unrpa提取RenPy游戏资源完全指南 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 如果你正在寻找一款能够轻松提取RPA游戏资源包的工具,…

2026/8/9 16:06:50