例如,有一个销售数据表,包罗product_id、sales_date和sales_amount列。如果想计算每个产品在差别日期范围内的销售总额,可以使用SUM(sales_amount) OVER (PARTITION BY product_id ORDER BY sales_date)。这将为每个产品(按照product_id分区)根据销售日期的次序,计算出每个日期对应的累计销售总额。
以员工表为例,包罗department_id(部分编号)、employee_id(员工编号)和salary(工资)列。如果使用AVG(salary) OVER (PARTITION BY department_id),就会为每个部分(按照department_id分区)计算均匀工资。如许,在查询效果中,每个员工记录旁边都会显示其地点部分的均匀工资。
SELECT Score,DENSE_RANK() OVER (ORDER BY Score DESC) AS rank
FROM score;
SELECT Score,RANK() OVER (ORDER BY Score DESC) AS rank
FROM score;
复制代码
表明:
窗口函数部分
DENSE_RANK() OVER (ORDER BY Score DESC):这是一个窗口函数。DENSE_RANK函数用于计算排名,它的特点是排名是连续的。OVER关键字用于指定窗口函数的作用范围,在这里(ORDER BY Score DESC)表现按照Score列的值进行降序排序来计算排名。
RANK() OVER (ORDER BY Score DESC):同样是一个窗口函数。RANK函数用于计算排名,当遇到相同的值时,这些相同的值会得到相同的排名,但是下一个排名会出现间隙。OVER关键字的作用和之前一样,按照Score列降序排序来计算排名。
查询部分
SELECT Score,DENSE_RANK() OVER (ORDER BY Score DESC) AS rank FROM score;:从score表中查询数据。选择Score列,并且使用DENSE_RANK窗口函数计算排名,将排名效果作为新的列rank(通过AS关键字命名)与Score列一起显示出来。
SELECT Score,RANK() OVER (ORDER BY Score DESC) AS rank FROM score;:和第一段代码的查询部分雷同,从score表中查询Score列,同时使用RANK窗口函数计算排名并将效果作为rank列与Score列一起展示。