SELECT b, c, d,SUM(d) OVER(PARTITION BY b,c ORDER BY d) e FROM a
今天看到一个老兄的问题,
大概如下: 查询出部门的最低工资的userid 号 表结构:
有一个高人给出了一种答案:
运行后得到:
楼主那位老兄一看觉得很高深。大叹真是高人阿~
我也觉得这位老兄实在是高啊。 但我仔细研究一下发现那位老兄对PARTITION BY的用法理解并不深刻。并没有解决楼主的问题。 大家请看我修改后的语句
运行后的结果:
大家看出端倪了吧。
高深的未必适合。 一下是我给出的答案:
运行后的结果:
由此我想到总结一下group by和partition by的用法
group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。 partition by虽然也具有分组功能,但同时也具有其他的功能。 它属于oracle的分析用函数。 借用一个勤快人的数据说明一下: sum() over (PARTITION BY ...) 是一个分析函数。 他执行的效果跟普通的sum ...group by ...不一样,它计算组中表达式的累积和,而不是简单的和。 表a,内容如下:
得到:
而使用分析函数得到的结果是:
结果不一样,这样看还不是很清楚,我们把d的内容也显示出来就更清楚了:
|