PostgreSQL with子句使用

PostgreSQL提供的一種方法,用於寫一個大的查詢中使用的輔助報表與查詢,能使複雜和大型查詢簡單易讀。

1:with子句的使用
使用現有數據庫查詢,查詢在2017.05.01號0點到2017.05.08號0點之間的充值玩家的id,sid,期間充值總數num。
命令如下:
with u as (select id, sum(amount) as num from pay where pay_time >= 1493568000 and pay_time < 1494172800 group by id) select u.id, pinfo.sid, u.num from u join pinfo on u.id=pinfo.id;

解析:
使用with查詢出相關玩家的id和期間充值總數num,
再查詢出對應id玩家的sid。

2:多個with子句的使用
使用現有數據查詢,在1的基礎上,增加查詢這些玩家到
2017.05.08號0點的歷史充值總數total。
with u1 as (select id, sum(amount) as num from pay where pay_time >= 1493568000 and pay_time < 1494172800 group by id), u2 as(select id, sum(amount) as total from pay where pay_time < 1494172800 group by id) select u1.id, pinfo.sid, u1.num, u2.total from u1, u2, pinfo where u2.id = u1.id and pinfo.id = u1.id;

解析:
使用with查詢出固定時間內充值的玩家id和期間充值總數,
使用with查詢出指定時間之前充值的玩家的id和歷史充值總數,
再查詢出u1中所有id對應的u2中的數據,以及pinfo中的sid。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章