数据处理之PostgreSQL过程语言学习

前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市。发现使用PostgreSQL过程语言可以大大加快自己处理数据的效率,下面就举个例子吧!相信大家看了后,也会喜欢上PostgreSQL过程语言的.......

首先给出一段SQL脚本,该SQL查询2015年9月10日的欠费数据:

?


1

2

3

4

5

6

7

8

9

SELECT DISTINCT

A.DAY_ID 统计日期

,A.CHANNEL_NAME 支局名称

,A.OWE_MONTH    欠费账期

,SUM(B.current_charge) 日回收

FROM 表1 A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID

WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=20150910 AND A.OWE_MONTH =201508 AND B.ACCT_MONTH=201508

GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH

虽然这个脚本可以提取一天的欠费数据,那么问题来了,如果你要提取9月1日到10的欠费数据,那不是要执行这个脚本十次么?

当然这里有更好的方法来提取欠费数据,那就是将该段SQL脚本写成PostgreSQL过程语言,然后只需要执行自定义的函数就可以提取十天的欠费数据了,这样大大的提高了自己的工作效率。

最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):

最后给出改进后的PostgreSQL过程语言函数以及postgresqlAPI的pdf文件(中文版本额!):

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

函数名wx_qf_hdb(统计日期, 01508);  格式: wx_qf_hdb(20150901, 201508);

功能:提取目前欠费帐龄截止统计日期的各支局欠费回收总数

*/

--start

CREATE FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric) RETURNS TEXT AS $$

DECLARE

LS_SQL         VARCHAR(5000);

today          VARCHAR(8);

qf_month        VARCHAR(6);

month_l        INTEGER;

num            numeric;

BEGIN

today := TRIM(to_char(day_id,99999999));--截止日期转为字符串

qf_month := TRIM(to_char(acct_month,999999));--欠费月份转为字符串

num := to_number(substr(today,1,6),999999);--区字符串的前6位

month_l := to_date(to_char(day_id+1,‘9999-99-99‘),‘yyyy-mm-dd‘)-to_date(to_char(num,‘9999-99‘)||‘-01‘,‘yyyy-mm-dd‘);--计算当月天数

FOR i IN 1..month_l LOOP

    LS_SQL := ‘create table temp_wuxi_qf‘||i||‘ as

SELECT DISTINCT

A.DAY_ID   统计日期

,A.CHANNEL_NAME 支局名称

,A.OWE_MONTH    欠费账期

,SUM(B.current_charge) 日回收

FROM 表1A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_ID

WHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=‘||to_char(day_id-month_l+i,99999999)||‘ AND A.OWE_MONTH =‘||qf_month||‘ AND B.ACCT_MONTH=‘||qf_month||

GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH‘;

    EXECUTE LS_SQL;

END LOOP;

--提取日数据

LS_SQL := ‘create table temp_wuxi_qf‘||qf_month||‘ as ‘;

FOR i IN 1..month_l LOOP

    LS_SQL := LS_SQL||‘SELECT * FROM temp_wuxi_qf‘||i||‘ UNION ‘;

END LOOP;

LS_SQL := LS_SQL||‘SELECT * FROM temp_wuxi_qf‘||month_l;

EXECUTE LS_SQL;

--汇总日数据

FOR i IN 1..month_l LOOP

    LS_SQL:=‘DROP TABLE temp_wuxi_qf‘||i;

    EXECUTE LS_SQL;

END LOOP;

--删除所有临时表

RETURN LS_SQL;

END;

$$ LANGUAGE plpgsql;

--end

select wx_qf_hdb(20150903,201508); --运行函数wx_qf_hdb(统计日期,欠费帐期)

DROP FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric); --删除函数

select * from temp_wuxi_qf欠费帐期;--查询表

drop table temp_wuxi_qf欠费帐期; -- 删除表

http://pan.baidu.com/s/1mg09t5Q(PostgreSQLAPI文件下载

有兴趣的朋友可以自己试着去研究下PostgreSQL过程语言函数,真的对长期从事提取数据的朋友们帮助很大

时间: 2024-10-13 21:33:58

数据处理之PostgreSQL过程语言学习的相关文章

Storm的数据处理编程单元:Bolt 学习整理

Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现自定义的处理过程,例如,过滤.函数.聚集.连接等计算.如果是复杂的计算过程,往往需要多个步骤和使用多个Bolt. Bolt可以将数据项发送至多个数据流(Stream).编程人员首先可以使用OutputFieldsDeclarer类的declareStream()方法来声明多个流,指定数据将要发送到的流,然后使用SpoutOutputColle

6.1Python数据处理篇之pandas学习系列(一)认识pandas

目录 目录 (一)介绍与测试 2.作用: 3.导入的格式 4.小测试 (二)数据类型 1.两种重要的数据类型 2.pandas与numpy的比较 目录 (一)介绍与测试 号称处理数据与分析数据最好的第三方库 1.官网: 官网文档 http://pandas.pydata.org/pandas-docs/stable/install.html 2.作用: 提供了便于操作的高效的数据结构 提供了许多分析函数与分析工具 3.导入的格式 import pandas as pd 4.小测试 下面如是测试成

createlang - 定义一种新的 PostgreSQL 过程语言

SYNOPSIS createlang [ connection-option...] langname [ dbname] createlang [ connection-option...] --list | -l dbname DESCRIPTION 描述 createlang 是一个用于向 PostgreSQL 数据库增加新的编程语言的工具. createlang 可以处理所有 PostgreSQL 版本缺省就提供的语言,但是不能处理其它方面提供的语言. 尽管可以用 SQL 命令直接增加

Mysql与PostgreSql数据库学习笔记

mysql 从最基础的数据引擎,到进程结构,都不能支持数据版本.导致其职能阻塞“并发”,不支持最基本的事务,innodb达不到基本事务要求,任何写数据,都导致整个表锁住.充其量只能算是一个玩具,或者说和一个key->value 数据存储没有什么区别, 根本算不上是数据库(RDBMS)mysql 无法支持任何的OLTP和OLAP. 只能作为CRUD的基本数据存储,发布到静态.目前所有的mysql运用都只能达到这个层面.oracle, 在数据库的所有方面都是行业标杆,一直被模仿,从未被超越.但是,价

postgresql常用命令

1.createdb 数据库名称  产生数据库2.dropdb  数据库名称  删除数据库 3.CREATE USER 用户名称  创建用户4.drop User 用户名称  删除用户 5.SELECT usename FROM pg_user;  查看系统用户信息  \du 7.SELECT version();  查看版本信息 8.psql 数据库名  打开psql交互工具 9.mydb=> \i basics.sql\i 命令从指定的文件中读取命令. 10.COPY weather FRO

机器学习和深度学习资料合集

机器学习和深度学习资料合集 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原文链接,因为这个项目还在继续也在不定期更新.希望看到文章的朋友能够学到更多.此外:某些资料在中国访问需要梯子. <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in

[转]机器学习和深度学习资料汇总【01】

本文转自:http://blog.csdn.net/sinat_34707539/article/details/52105681 <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in Neural Networks: An Overview> 介绍:这是瑞士人工智能实验室Jurgen

Getting Started with PostgreSQL

Getting Started with PostgreSQL [email protected] Abstract. PostgreSQL is an excellent implementation of relational database, fully featured, open source, and free to use. Nearly nontrivial computer applications manipulate large amounts of data, and

机器学习与深度学习资料

<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in Neural Networks: An Overview> 介绍:这是瑞士人工智能实验室Jurgen Schmidhuber写的最新版本<神经网络与深度学习综述>本综述的特点是以时间排序,从1940年开始讲起,到60-80