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()
里,前者影响结果排序,后者影响统计逻辑,别搞混了。
如果你平时做财务报表、销售排名这类统计密集的需求,强烈建议把函数玩熟,能省下不少代码量。