資料處理之PostgreSQL過程語言學習

來源:互聯網
上載者:User

標籤:

前段時間,公司更換新的PostgreSQL資料集市的系統過程中,自己下載了postgresqlAPI的pdf檔案研究了一下PostgreSQL資料集市。發現使用PostgreSQL過程語言可以大大加快自己處理資料的效率,下面就舉個例子吧!相信大家看了後,也會喜歡上PostgreSQL過程語言的.......

 

首先給出一段SQL指令碼,該SQL查詢2015年9月10日的欠費資料:



?
123456789 SELECT DISTINCTA.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_IDWHERE A.AREA_ID=27 AND B.mkt_area_ID=27 AND A.DAY_ID=20150910 AND A.OWE_MONTH =201508 AND B.ACCT_MONTH=201508GROUP BY A.DAY_ID,A.CHANNEL_NAME,A.OWE_MONTH

 

雖然這個指令碼可以提取一天的欠費資料,那麼問題來了,如果你要提取9月1日到10的欠費資料,那不是要執行這個指令碼十次嗎?

 

當然這裡有更好的方法來提取欠費資料,那就是將該段SQL指令碼寫成PostgreSQL過程語言,然後只需要執行自訂的函數就可以提取十天的欠費資料了,這樣大大的提高了自己的工作效率。

 

最後給出改進後的PostgreSQL過程語言函數以及postgresqlAPI的pdf檔案(中文版本額!):



最後給出改進後的PostgreSQL過程語言函數以及postgresqlAPI的pdf檔案(中文版本額!):



?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 函數名wx_qf_hdb(統計日期, 01508);  格式: wx_qf_hdb(20150901, 201508);功能:提取目前欠費帳齡截止統計日期的各支局欠費回收總數*/--startCREATE FUNCTION wx_qf_hdb(day_id numeric,acct_month numeric) RETURNS TEXT AS $$DECLARELS_SQL         VARCHAR(5000);today          VARCHAR(8);qf_month        VARCHAR(6);month_l        INTEGER;num            numeric;BEGINtoday := 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 DISTINCTA.DAY_ID   統計日期,A.CHANNEL_NAME 支局名稱,A.OWE_MONTH    欠費賬期,SUM(B.current_charge) 日回收FROM 表1A LEFT JOIN 表2 B ON A.SERV_ID=B.SERV_IDWHERE 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;--endselect 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過程語言函數,真的對長期從事提取資料的朋友們協助很大

 

資料處理之PostgreSQL過程語言學習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.