Oracle 的函数,报表场景真挺顺手的。跟普通聚合函数不一样,它不仅能分组,还能对每行都返回统计值,适合那种又要分组又要明细的复杂需求。

像是RANK()ROW_NUMBER()这些函数,在做排名、窗口统计时有用,SQL 看着也不复杂。

OVER()是函数的核心,用法有点像函数的“作用域”定义,能控制分组、排序、窗口这些。常见的结构:

SUM(salary) OVER (PARTITION BY dept_id ORDER BY salary)

比如你想知道每个部门中,的工资在部门内排名是多少,用RANK()就行,语义清晰。还有LAG()LEAD(),拿来做环比、同比也挺方便的。

它跟GROUP BY不冲突,而且还能结合使用,像ROLLUP()CUBE()这种辅助函数,用来做多维效果也还不错。

写函数要注意下顺序问题,比如ORDER BY既出现在查询结尾也能写在OVER()里,前者影响结果排序,后者影响统计逻辑,别搞混了。

如果你平时做财务报表、销售排名这类统计密集的需求,强烈建议把函数玩熟,能省下不少代码量。