🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
一、聚合函数(Aggregate Functions)
函数名 | 说明 | 示例 |
---|
COUNT(*) | 统计所有行数 | SELECT COUNT(*) FROM orders; |
COUNT(column) | 统计非空值数量 | SELECT COUNT(email) FROM users; |
SUM(column) | 计算数值列总和 | SELECT SUM(price * quantity) AS total FROM order_items; |
AVG(column) | 计算数值列平均值 | SELECT AVG(salary) FROM employees; |
MIN(column) | 获取最小值 | SELECT MIN(created_at) FROM logs; |
MAX(column) | 获取最大值 | SELECT MAX(temperature) FROM weather; |
STDDEV(column) | 计算标准差(部分数据库支持) | SELECT STDDEV(score) FROM exams; |
VAR(column) | 计算方差(部分数据库支持) | SELECT VAR(score) FROM exams; |
GROUP_CONCAT() | 合并多行字符串(MySQL) | SELECT GROUP_CONCAT(DISTINCT category SEPARATOR ', ') FROM products; |
STRING_AGG() | 合并字符串(SQL Server/PostgreSQL) | SELECT STRING_AGG(name, ', ') FROM tags; |
二、字符串函数(String Functions)
函数名 | 说明 | 示例 |
---|
CONCAT() | 拼接字符串 | SELECT CONCAT(first_name, ' ', last_name) AS full_name; |
SUBSTRING(str, start, length) | 截取子字符串 | SELECT SUBSTRING('Hello World', 7, 5); → World |
LEFT(str, length) | 从左侧截取 | SELECT LEFT('Hello', 3); → Hel |
RIGHT(str, length) | 从右侧截取 | SELECT RIGHT('Hello', 3); → llo |
LENGTH(str) | 获取字符串长度 | SELECT LENGTH('SQL'); → 3 |
CHAR_LENGTH(str) | 获取字符数(多字节字符支持) | SELECT CHAR_LENGTH('中文'); → 2 |
UPPER(str) | 转大写 | SELECT UPPER('hello'); → HELLO |
LOWER(str) | 转小写 | SELECT LOWER('WORLD'); → world |
TRIM(str) | 去除空格 | SELECT TRIM(' data '); → data |
REPLACE(str, old, new) | 替换子字符串 | SELECT REPLACE('apple-banana', '-', ' '); → apple banana |
INSTR(str, substr) | 查找子串位置(MySQL) | SELECT INSTR('hello world', 'world'); → 6 |
POSITION(substr IN str) | 查找子串位置(PostgreSQL) | SELECT POSITION('world' IN 'hello world'); → 6 |
LPAD(str, length, pad) | 左侧填充 | SELECT LPAD('7', 3, '0'); → 007 |
RPAD(str, length, pad) | 右侧填充 | SELECT RPAD('7', 3, '0'); → 700 |
三、数值函数(Numeric Functions)
函数名 | 说明 | 示例 |
---|
ABS(num) | 绝对值 | SELECT ABS(-10); → 10 |
ROUND(num, decimals) | 四舍五入 | SELECT ROUND(3.14159, 2); → 3.14 |
CEIL(num) | 向上取整 | SELECT CEIL(4.2); → 5 |
FLOOR(num) | 向下取整 | SELECT FLOOR(4.8); → 4 |
POWER(base, exp) | 计算幂 | SELECT POWER(2, 3); → 8 |
MOD(num, divisor) | 取模(余数) | SELECT MOD(10, 3); → 1 |
SQRT(num) | 平方根 | SELECT SQRT(16); → 4 |
RAND() | 生成随机数(0-1之间) | SELECT RAND(); → 0.123456 |
SIGN(num) | 返回符号(-1, 0, 1) | SELECT SIGN(-5); → -1 |
四、日期时间函数(Date/Time Functions)
通用函数
函数名 | 说明 | 示例 |
---|
NOW() | 当前时间戳 | SELECT NOW(); → 2023-10-05 14:30:00 |
CURRENT_DATE | 当前日期 | SELECT CURRENT_DATE; → 2023-10-05 |
CURRENT_TIME | 当前时间 | SELECT CURRENT_TIME; → 14:30:00 |
EXTRACT(part FROM date) | 提取日期部分 | SELECT EXTRACT(YEAR FROM '2023-10-05'); → 2023 |
DATE_PART(part, date) | 提取日期部分(PostgreSQL) | SELECT DATE_PART('month', '2023-10-05'); → 10 |
MySQL
函数名 | 说明 | 示例 |
---|
DATE_FORMAT(date, format) | 格式化日期 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); |
DATE_ADD(date, INTERVAL expr) | 日期加减 | SELECT DATE_ADD('2023-10-05', INTERVAL 1 DAY); → 2023-10-06 |
DATEDIFF(date1, date2) | 日期差值(天数) | SELECT DATEDIFF('2023-10-10', '2023-10-01'); → 9 |
PostgreSQL
函数名 | 说明 | 示例 |
---|
TO_CHAR(date, format) | 格式化日期 | SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS'); |
DATE_TRUNC(part, date) | 截断日期到指定精度 | SELECT DATE_TRUNC('month', NOW()); → 2023-10-01 |
AGE(date) | 计算当前时间与给定时间的差值 | SELECT AGE(NOW(), '2023-01-01'); → 9 months |
SQL Server
函数名 | 说明 | 示例 |
---|
FORMAT(date, format) | 格式化日期 | SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss'); |
DATEADD(part, num, date) | 日期加减 | SELECT DATEADD(DAY, 1, '2023-10-05'); → 2023-10-06 |
DATEDIFF(part, date1, date2) | 日期差值 | SELECT DATEDIFF(DAY, '2023-10-01', '2023-10-10'); → 9 |
五、条件函数(Conditional Functions)
函数名 | 说明 | 示例 |
---|
CASE WHEN | 多条件分支 | sql SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END; |
COALESCE(arg1, arg2, ...) | 返回第一个非空值 | SELECT COALESCE(null_column, 'N/A'); |
NULLIF(arg1, arg2) | 若两值相等则返回 NULL | SELECT NULLIF(value, 0); → 若 value=0 则返回 NULL |
IIF(condition, true_value, false_value) | 简单条件(SQL Server) | SELECT IIF(age > 18, 'Adult', 'Minor'); |
SWITCH(expr, case1, result1, case2, result2, ...) | 多分支(部分数据库支持) | SELECT SWITCH(role, 'admin', 1, 'user', 2); |
六、窗口函数(Window Functions)
函数名 | 说明 | 示例 |
---|
ROW_NUMBER() | 生成行号(唯一) | SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num; |
RANK() | 排名(允许并列,如1,1,3) | SELECT RANK() OVER (PARTITION BY department ORDER BY sales DESC); |
DENSE_RANK() | 密集排名(无间隔,如1,1,2) | SELECT DENSE_RANK() OVER (ORDER BY score DESC); |
SUM(column) OVER() | 分区内累计值 | SELECT SUM(amount) OVER (PARTITION BY user_id ORDER BY date) AS running_total; |
AVG(column) OVER() | 分区内平均值 | SELECT AVG(price) OVER (PARTITION BY category); |
LEAD(column, offset) | 获取后续行的值 | SELECT LEAD(date, 1) OVER (ORDER BY date) AS next_date; |
LAG(column, offset) | 获取前一行值 | SELECT LAG(price, 1) OVER (ORDER BY date) AS prev_price; |
NTILE(num_buckets) | 将数据分为指定数量的桶 | SELECT NTILE(4) OVER (ORDER BY score) AS quartile; |
七、系统函数(System Functions)
函数名 | 说明 | 示例 |
---|
USER / CURRENT_USER | 当前登录用户 | SELECT USER(); |
VERSION() | 数据库版本 | SELECT VERSION(); → MySQL 8.0.30 |
DATABASE() | 当前数据库名 | SELECT DATABASE(); |
@@IDENTITY | 最后插入的自动增长ID(SQL Server) | INSERT INTO table VALUES(...); SELECT @@IDENTITY; |
UUID() / GEN_RANDOM_UUID() | 生成唯一标识符(PostgreSQL) | SELECT GEN_RANDOM_UUID(); → a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 |
CURRENT_TIMESTAMP | 当前时间戳(标准SQL) | SELECT CURRENT_TIMESTAMP; |
八、类型转换函数
函数名 | 说明 | 示例 |
---|
CAST(expr AS type) | 显式类型转换 | SELECT CAST('123' AS INT); |
CONVERT(type, expr) | 类型转换(支持格式指定) | SELECT CONVERT(VARCHAR, 123); |
TRY_CAST(expr AS type) | 安全转换(失败返回NULL,SQL Server) | SELECT TRY_CAST('abc' AS INT); → NULL |
::type | PostgreSQL简写类型转换 | SELECT '123'::INT; |
九、其他函数
函数名 | 说明 | 示例 |
---|
EXISTS(subquery) | 检查子查询是否存在结果 | SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE users.id = orders.user_id); |
IN(list) | 匹配列表中的值 | SELECT * FROM products WHERE category IN ('Electronics', 'Books'); |
BETWEEN start AND end | 范围筛选 | SELECT * FROM logs WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31'; |
JSON_VALUE(json, path) | 提取JSON字段值(SQL Server) | SELECT JSON_VALUE(data, '$.name') FROM json_table; |
~ (正则表达式) | 正则匹配(PostgreSQL) | SELECT 'hello' ~ '^h'; → true |
PI() | 返回圆周率π | SELECT PI(); → 3.141592653589793 |
注意事项
- 数据库差异:不同数据库的函数名称和参数可能不同(如日期函数)。
- 性能优化:避免在大型数据集上频繁使用复杂函数。
- 兼容性:标准SQL函数(如
CURRENT_TIMESTAMP
)通常跨数据库兼容。