美文网首页
SQL with as 用法

SQL with as 用法

作者: 周倜吉 | 来源:发表于2018-06-29 11:15 被阅读0次

    WITH AS短语,也叫做子查询部分(subquery factoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。

    比如

    with A as (select * from class)

    select *from A  
    

    这个语句的意思就是,先执行select * from class 得到一个结果,将这个结果记录为A ,在执行select *from A 语句。A 表只是一个别名。

    也就是将重复用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。

    对于大批量的SQL数据,起到优化的作用。

    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。

    相关文章

      网友评论

          本文标题:SQL with as 用法

          本文链接:https://www.haomeiwen.com/subject/wnaoyftx.html