分析函数的语法:

    Function

    目前支持的 Function 包括 AVG(), COUNT(), DENSE_RANK(), FIRST_VALUE(), LAG(), LAST_VALUE(), LEAD(), MAX(), MIN(), RANK(), ROW_NUMBER() 和 SUM()。

    PARTITION BY从句

    ORDER BY从句

    Order By从句和外层的Order By基本一致。它定义了输入行的排列顺序,如果指定了 Partition By,则 Order By 定义了每个 Partition 分组内的顺序。与外层 Order By 的唯一不同点是,OVER 从句中的 Order By n(n是正整数)相当于不做任何操作,而外层的 Order By n表示按照第n列排序。

    举例:

    1. row_number() OVER (ORDER BY date_and_time) AS id,
    2. c1, c2, c3, c4
    3. FROM events;

    Window从句

    Window 从句用来为分析函数指定一个运算范围,以当前行为准,前后若干行作为分析函数运算的对象。Window 从句支持的方法有:AVG(), COUNT(), FIRST_VALUE(), LAST_VALUE() 和 SUM()。对于 MAX() 和 MIN(), window 从句可以指定开始范围 UNBOUNDED PRECEDING

    语法:

    1. create table stock_ticker (stock_symbol string, closing_price decimal(8,2), closing_date timestamp);
    2. select * from stock_ticker order by stock_symbol, closing_date
    3. | stock_symbol | closing_price | closing_date |
    4. | JDR | 12.86 | 2014-10-02 00:00:00 |
    5. | JDR | 12.94 | 2014-10-04 00:00:00 |
    6. | JDR | 12.55 | 2014-10-05 00:00:00 |
    7. | JDR | 14.03 | 2014-10-06 00:00:00 |
    8. | JDR | 14.75 | 2014-10-07 00:00:00 |

    这个查询使用分析函数产生 moving_average 这一列,它的值是3天的股票均价,即前一天、当前以及后一天三天的均价。第一天没有前一天的值,最后一天没有后一天的值,所以这两行只计算了两天的均值。这里 Partition By 没有起到作用,因为所有的数据都是 JDR 的数据,但如果还有其他股票信息,Partition By 会保证分析函数值作用在本 Partition 之内。