欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 大数据学习(106)-hivesql函数

大数据学习(106)-hivesql函数

2025/4/21 4:59:33 来源:https://blog.csdn.net/weixin_61006262/article/details/147248230  浏览:    关键词:大数据学习(106)-hivesql函数

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


一、聚合函数(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)若两值相等则返回 NULLSELECT 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
::typePostgreSQL简写类型转换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

注意事项

  1. 数据库差异:不同数据库的函数名称和参数可能不同(如日期函数)。
  2. 性能优化:避免在大型数据集上频繁使用复杂函数。
  3. 兼容性:标准SQL函数(如CURRENT_TIMESTAMP)通常跨数据库兼容。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词