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

【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常用函数。

  • 你若觉得某些函数介绍不够详细,或想增加其他类型函数,欢迎告诉我。

相关文章:

  • 近期搬了个家,停更了几天,明天继续哈~
  • 图论part10 bellman_ford算法
  • MCP:开启AI的“万物互联”时代
  • Linux干货(三)
  • whonix系统详解
  • 【DRAM存储器五十一】LPDDR5介绍--CK、WCK、RDQS单端模式、Thermal Offset、Temperature Sensor
  • 系统单元测试和项目打包
  • 传统LED拼接屏过时了吗?无缝技术如何改写展厅视觉呈现规则?
  • LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
  • React系列——nvm、node、npm、yarn(MAC)
  • ESP系列单片机选择指南:结合实际场景的最优选择方案
  • 【Elasticsearch】DSL 篇
  • Oracle日期计算跟Mysql计算日期差距问题-导致两边计算不一致
  • 3天云南旅游规划
  • Java多线程售票系统实现与异常处理详解
  • 高级消防设施操作员证用途有哪些
  • Linux proc文件系统 内存影射
  • AMS3xxi激光测距仪安装调试维护详解
  • 第二章日志分析-apache日志分析
  • 第5章 运算符、表达式和语句
  • 商人运作亿元“茅台酒庞氏骗局”,俩客户自认受害人不服“从犯”判决提申诉
  • 甘肃发布外卖食品安全违法行为典型案例:一商家用鸭肉冒充牛肉被罚
  • 中国-拉共体成员国重点领域合作共同行动计划(2025-2027)
  • 美凯龙:董事兼总经理车建兴被立案调查并留置
  • 外交部亚洲司司长刘劲松会见印度驻华大使罗国栋
  • 福州千余公共道路泊车位装“智能地锁”续:运营公司被责令改正并罚款