比较加了ORDER BY前后的区别

[复制链接]
查看11 | 回复7 | 2007-7-4 17:27:50 | 显示全部楼层 |阅读模式
问个问题
(1)利用如下语句:
SELECT manager_id, last_name, salary,
MAX(salary) OVER (PARTITION BY manager_id /*order by last_name*/ ) AS mgr_max
FROM hr.employees
WHERE MANAGER_ID=100
出来的结果
manager_id last_namesalary
mgr_max

100
Kochhar
17000.00
17000
100
De Haan
17000.00
17000
100
Raphaely
11000.00
17000
100
Weiss
8000.00
17000
100
Fripp
8200.00
17000
100
Kaufling
7900.00
17000
100
Vollman
6500.00
17000
100
Mourgos
5800.00
17000
100
Russell
14000.00
17000
100
Partners
13500.00
17000
100
Errazuriz
12000.00
17000
100
Cambrault
11000.00
17000
100
Zlotkey
10500.00
17000
100
Hartstein
13000.00
17000
(2)利用下面的语句
SELECT manager_id, last_name, salary,
MAX(salary) OVER (PARTITION BY manager_id order by last_name ) AS mgr_max
FROM hr.employees
WHERE MANAGER_ID=100
出来的结果:
manager_id last_namesalary
mgr_max

100
Cambrault
11000.00
11000
100
De Haan
17000.00
17000
100
Errazuriz
12000.00
17000
100
Fripp
8200.00
17000
100
Hartstein
13000.00
17000
100
Kaufling
7900.00
17000
100
Kochhar
17000.00
17000
100
Mourgos
5800.00
17000
100
Partners
13500.00
17000
100
Raphaely
11000.00
17000
100
Russell
14000.00
17000
100
Vollman
6500.00
17000
100
Weiss
8000.00
17000
100
Zlotkey
10500.00
17000
以上的(1)和(2)差别在于(1)无order by last_name,(2)中有order by last_name,请问下,为什么加了ORDER BY 之后出来的结果有差异呢?
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
因为是逐次比较last_name的大小, 然后返回salary, 看看文档就知道了!
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层


楼上的正解.
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
有点不太明白,是LAST_NAME比较和SALARY有什么关系呢?
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
我的理解:
加了order by,排序确定后
max的是当前行和之前行的 SALARY
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
是否在单函数中也是这样的呢?
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
原帖由 HelloWorld_001 于 2008-12-31 17:07 发表
我的理解:
加了order by,排序确定后
max的是当前行和之前行的 SALARY

是这样的,
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
原帖由 HelloWorld_001 于 2008-12-31 17:07 发表
我的理解:
加了order by,排序确定后
max的是当前行和之前行的 SALARY

和sum()over(order by)一样理解就可以了 sum当前行与之前行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行