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。

你可能感兴趣的:(数据库)