当前位置: 首页 > java >正文

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-A. PostgreSQL常用函数速查表

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • PostgreSQL常用函数速查表:从数据清洗到分析的全场景工具集
    • 引言
    • 一、字符串处理函数
      • 1.1 基础操作函数
      • 1.2 模式匹配函数(正则表达式)
    • 二、数值计算函数
      • 2.1 基础运算函数
      • 2.2 统计相关函数
    • 三、日期与时间函数
      • 3.1 基础日期操作
      • 3.2 日期算术运算
    • 四、聚合函数与窗口函数
      • 4.1 聚合函数
      • 4.2 窗口函数
    • 五、类型转换函数
    • 六、条件判断函数
    • 结语

在这里插入图片描述
我将围绕《PostgreSQL数据分析实战》附录-A 的内容,以常用函数分类的形式,详细介绍各函数的描述、语法、示例及返回值,通过表格和具体数据让内容更清晰易懂,为读者呈现一份实用的速查表博客。

PostgreSQL常用函数速查表:从数据清洗到分析的全场景工具集

引言

在PostgreSQL数据分析场景中,熟练掌握内置函数是提升数据处理效率的关键。

  • 本文基于《PostgreSQL数据分析实战:从数据清洗到可视化全流程》附录A,整理了字符串处理、数值计算、日期操作、聚合统计等核心功能模块的常用函数,结合具体业务场景示例,帮助读者快速掌握函数应用技巧。
  • 所有示例基于以下测试表结构
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),salary NUMERIC(10,2),hiredate DATE,department VARCHAR(30)
);-- 示例数据
INSERT INTO employees VALUES
(1, 'Alice Smith', 85000.00, '2020-01-15', 'Engineering'),
(2, 'Bob Johnson', 72000.50, '2021-03-20', 'Marketing'),
(3, 'Charlie Brown', 68000.75, '2022-05-25', 'Sales');

一、字符串处理函数

字符串函数是数据清洗阶段的核心工具,常用于处理不规范文本、提取关键信息或拼接输出内容

1.1 基础操作函数

函数名描述语法示例返回值
CONCAT拼接字符串CONCAT(str1, str2, …)CONCAT(‘Hello’, ’ ', ‘World’)“Hello World”
SUBSTRING提取子字符串SUBSTRING(str FROM start [FOR length])SUBSTRING(‘PostgreSQL’, 3, 4)“stgr”
TRIM去除首尾指定字符(默认空格)TRIM([LEADING/TRAILING/BOTH] [chars] FROM str)TRIM(’ data ')“data”
REPLACE替换指定子串REPLACE(str, old_str, new_str)REPLACE(‘a_b_c’, ‘_’, ‘-’)“a-b-c”
UPPER/LOWER转换大小写UPPER(str)/LOWER(str)UPPER(‘hello’)“HELLO”

1.2 模式匹配函数(正则表达式)

函数名描述语法示例返回值
REGEXP_MATCHES返回匹配正则的所有子串REGEXP_MATCHES(str, pattern, [flags])REGEXP_MATCHES(‘a1b2c3’, ‘\d’){1,2,3}(数组)
REGEXP_REPLACE使用正则替换子串REGEXP_REPLACE(str, pattern, replacement, [flags])REGEXP_REPLACE(‘abc123’, ‘\d+’, ‘NUM’)“abcNUM”
SPLIT_PART按分隔符拆分字符串并返回指定部分SPLIT_PART(str, delimiter, part)SPLIT_PART(‘a,b,c’, ‘,’, 2)“b”
  • 业务场景示例:清洗员工姓名格式
-- 去除姓名前后空格并统一首字母大写
UPDATE employees SET name = INITCAP(TRIM(name));
-- 提取姓名中的姓氏(假设姓名格式为“名 姓”)
SELECT name, SPLIT_PART(name, ' ', 2) AS last_name FROM employees;

在这里插入图片描述

二、数值计算函数

数值函数用于数据转换、统计计算和数学运算,支持整数、浮点数和精确数值类型。

2.1 基础运算函数

函数名描述语法示例返回值
ROUND四舍五入ROUND(num [, decimal_places])ROUND(123.456, 2)123.46
CEIL/FLOOR向上/向下取整CEIL(num)/FLOOR(num)CEIL(3.14)4
ABS绝对值ABS(num)ABS(-100)100
MOD取模运算MOD(num, divisor)MOD(7, 3)1
POWER幂运算POWER(base, exponent)POWER(2, 3)8

2.2 统计相关函数

函数名描述语法示例返回值
AVG平均值AVG(column)AVG(salary)75000.42(假设)
SUM求和SUM(column)SUM(salary)225001.25
COUNT计数COUNT([DISTINCT] column)COUNT(DISTINCT department)3

业务场景示例:计算员工薪资等级

-- 将薪资四舍五入到千位并分类
SELECT name, salary, CASE WHEN ROUND(salary / 1000) >= 80 THEN '高薪'WHEN ROUND(salary / 1000) >= 70 THEN '中等'ELSE '基础'END AS salary_level
FROM employees;

在这里插入图片描述

三、日期与时间函数

日期函数在时间序列分析、数据过滤和趋势计算中不可或缺,支持DATE、TIME、TIMESTAMP类型。

3.1 基础日期操作

函数名描述语法示例返回值
CURRENT_DATE获取当前日期CURRENT_DATECURRENT_DATE2025-05-14(当前日期)
AGE计算时间间隔AGE(end_date, start_date)AGE(hiredate, ‘2020-01-01’)间隔年数/月数/天数
EXTRACT提取日期部分EXTRACT(part FROM date)EXTRACT(YEAR FROM hiredate)2020
DATE_PART等价于EXTRACTDATE_PART(part, date)DATE_PART(‘month’, hiredate)1
DATE_TRUNC截断日期到指定精度DATE_TRUNC(part, date)DATE_TRUNC(‘year’, hiredate)2020-01-01

3.2 日期算术运算

操作符描述语法示例返回值
+日期加天数/时间间隔date + INTERVAL 'n day'hiredate + INTERVAL ‘1 year’2021-01-15
-日期减天数/计算时间差date - INTERVAL 'n day'CURRENT_DATE - hiredate间隔天数
BETWEEN判断日期是否在区间内date BETWEEN start AND endhiredate BETWEEN ‘2020-01-01’ AND ‘2022-12-31’TRUE/FALSE
  • 业务场景示例:计算员工工龄
SELECT name,EXTRACT(YEAR FROM AGE(hiredate)) AS years_of_service,  -- 完整工龄(年)(EXTRACT(YEAR FROM CURRENT_DATE) * 12 + EXTRACT(MONTH FROM CURRENT_DATE))  -- 当前总月数- (EXTRACT(YEAR FROM hiredate) * 12 + EXTRACT(MONTH FROM hiredate))         -- 入职总月数AS months_worked  -- 累计完整月份数
FROM employees;

在这里插入图片描述

四、聚合函数与窗口函数

聚合函数用于分组统计,窗口函数则在保留行级别数据的同时进行分组计算,常用于排名、累计值等场景

4.1 聚合函数

函数名描述语法示例返回值
COUNT统计行数COUNT(*) / COUNT(column)COUNT(*) FROM employees3
SUM求和SUM(salary)SUM(salary)225001.25
AVG平均值AVG(salary)AVG(salary)75000.42
MAX/MIN最大值/最小值MAX(salary)/MIN(salary)MAX(salary)85000.00

4.2 窗口函数

函数名描述语法示例返回值
ROW_NUMBER()行号排序(无并列)ROW_NUMBER() OVER (ORDER BY salary DESC)按薪资降序排名1,2,3
RANK()排名(并列同号,跳过后续)RANK() OVER (ORDER BY salary DESC)薪资排名(可能有并列)1,2,2
DENSE_RANK()密集排名(并列同号,不跳过)DENSE_RANK() OVER (ORDER BY salary DESC)连续排名1,2,2
SUM() OVER()分组累计和SUM(salary) OVER (PARTITION BY department ORDER BY hiredate)部门内按入职时间累计薪资累计值序列
  • 业务场景示例:查询各部门薪资排名
SELECT name, department, salary,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

在这里插入图片描述

五、类型转换函数

类型转换函数用于处理不同数据类型间的兼容问题,确保计算和存储的正确性。

函数名描述语法示例返回值
CAST显式类型转换CAST(expr AS type)CAST(‘123’ AS INT)123
::类型转换操作符expr::type‘2020-01-01’::DATE日期类型值
TO_CHAR日期/数值转字符串TO_CHAR(date, format)TO_CHAR(hiredate, ‘YYYY-MM-DD’)“2020-01-15”
TO_NUMBER字符串转数值TO_NUMBER(str, format)TO_NUMBER(‘12,345’, ‘99G999’)12345
  • 业务场景示例:格式化薪资输出
SELECT name, TO_CHAR(salary, '$999,999.00') AS formatted_salary
FROM employees;

在这里插入图片描述

六、条件判断函数

条件函数用于根据不同逻辑分支返回对应结果,是数据清洗和业务逻辑实现的核心。

函数名描述语法示例返回值
CASE WHEN多条件分支判断CASE WHEN condition THEN result [ELSE default] ENDCASE WHEN salary > 80000 THEN ‘Senior’ ELSE ‘Junior’ END“Senior"或"Junior”
COALESCE返回第一个非空值COALESCE(expr1, expr2, …)COALESCE(NULL, ‘Default’)“Default”
NULLIF相等则返回NULL,否则返回原值NULLIF(expr1, expr2)NULLIF(10, 10)NULL
  • 业务场景示例:处理缺失部门数据
UPDATE employees SET department = COALESCE(department, 'Unknown');
  • 快速查询各函数帮助文档
-- 输入 \h 函数名 查看帮助(以 CONCAT 为例):
\h CONCAT-- \df 是 psql 的元命令,用于列出数据库中所有函数(可结合通配符过滤)。
\df CONCAT  -- 查看所有名为 CONCAT 的函数-- 快速查询各函数帮助文档
-- 示例:查询CONCAT函数用法
-- 查询 CONCAT 函数的元数据
SELECT proname AS 函数名,pg_get_function_arguments(oid) AS 参数,pg_typeof(prorettype) AS 返回类型,prosrc AS 函数定义(部分)
FROM pg_proc 
WHERE proname = 'concat';

结语

本文整理的PostgreSQL常用函数覆盖了数据清洗、转换、分析和可视化的全流程场景

  • 建议读者通过实际数据集练习函数组合使用,例如结合正则表达式清洗不规范文本,再通过窗口函数进行分组排名,最终用TO_CHAR函数格式化输出结果
  • 后续文章将深入探讨如何利用这些函数构建复杂数据分析模型,敬请关注!

以上博客全面梳理了PostgreSQL常用函数。

  • 你若觉得某些函数介绍不够详细,或想增加其他类型函数,欢迎告诉我。
http://www.xdnf.cn/news/6173.html

相关文章:

  • 基于EFISH-SCB-RK3576/SAIL-RK3576的智能快递分拣机技术方案‌
  • 时序数据库IoTDB分布式系统监控基础概述
  • 小白成长之路-文件和目录内容检索处理(二)
  • 【C++重载操作符与转换】纯虚函数
  • 尚硅谷阳哥JVM
  • 智能工具协同赋能STEM教育科研|探索LLM大语言模型和数学软件Maple的创新实践
  • 2025年城市建设与交通运输国际会议(ICUCT 2025)
  • Baklib全场景知识中台驱动效能跃升
  • less中使用 @supports
  • 在C++中进行套接字编程时,主要使用以下头文件
  • CSS:选择器的优先级
  • 深入剖析某App视频详情逆向:聚焦sig3参数攻克
  • (10天冲刺版)软考:软件设计师 真题资料分享
  • Java高频面试之并发编程-17
  • 高海拔和远距离的人员识别:面部、体型和步态的融合
  • spark的Standalone模式介绍
  • 最大公约数JAVA
  • CK-S654-PA60一拖四分体式半导体电子货架专用RFID读写器|读码器接线使用说明
  • <论文>(微软)避免推荐域外物品:基于LLM的受限生成式推荐
  • “天神之眼”计算平台的算力设计(预计500-1000 TOPS)
  • 认识Docker/安装Docker
  • C及C++的SOAP协议库
  • 相关行业发展趋势写一个爬虫程序
  • 力扣3337. 字符串转换后的长度 II随笔
  • 2024年全国青少年信息素养大赛-算法创意实践C++ 华中赛区(初赛)历年真题
  • HTML5 浮动(Float)详解
  • 上海OA系统哪家好?厂商有哪些?
  • 如何在终端/命令行中把PDF的每一页转换成图片(PNG)
  • 从0开始学linux韦东山教程第三章问题小结(4)
  • 易学探索助手-个人记录(十)