SparkSQL開窗函式

mn_kw發表於2018-07-30

row_number()開窗函式

其實就是給每個分組的資料,按照其排序的順序,打上一個分組內的行號

比如說,有一個分組date = 20151001,裡面有三條資料,1122,1121,1124,

那麼對這個分組的每一行使用row_number()開窗函式以後,三行,依次會獲得組內的行號

行號從1開始遞增,比如1122  1,1121  2,1123  3

 

row_number()開窗函式的語法說明

首先可以,在SELECT查詢時,使用row_number函式,其次,row_number()函式後面先跟上OVER關鍵字

然後括號中,是PARTITION BY,也就是說根據哪個欄位進行分組

其次是可以用ORDER BY 進行組內排序,

然後row_number()就可以給每個組內的行,一個組內行號

row_number() OVER (PARTITION BY category ORDER BY revenue DESC) rank

 

DataFrame saleDF = hiveContext.sql(""
            + "SELECT product,category,revenue"
            + "FORM ("
                + "SELECT"
                    + "project,"
                    + "category,"
                    + "revenue,"
                    + "row_number() OVER (PARTITION BY category ORDER BY revenue DESC) rank"
                + "FROM slaes"
            + ") tmp_sales"
            + "WHERE rank <=3");

//開窗函式的作用,其實就是,給每個分組的資料,按照排序順序,打上分組內的行號

相關文章