今天偶然做了一个实验
SELECT E.*,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) A,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) B
FROM EMP E;
查询结果如图
我的疑惑是为什么相同JOB组,返回确有不同。
还请大家指教。可用分不多了,请见谅!
SELECT E.*,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) A,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) B
FROM EMP E;
查询结果如图
我的疑惑是为什么相同JOB组,返回确有不同。
还请大家指教。可用分不多了,请见谅!
相同的JOB Manager,应该分成了两组。
SALESMAN 同理
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) B你这两句是矛盾的,不可能按照JOB分组后,并同时按照SAL正序和倒序排序.
只有b列的分组排序是有效的,a列的max(sal)其实只是针对一条记录.
MIN(SAL) OVER(PARTITION BY JOB ORDER BY SAL ) A,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL ) B
FROM EMP E;
想要的结果是同时取最大和最小,结果取不出来,默认升序,有一种结果只能取到当前行,原理好像是通过TRACE事件跟踪出来的,自己试试吧
要取得最大和最小,要使用下面的语句SELECT E.*,
MIN(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) A,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) B
FROM EMP E;
SELECT E.*,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) A,
MAX(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) B,
SUM(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) C,
SUM(SAL) OVER(PARTITION BY JOB ORDER BY SAL DESC) D
FROM EMP E;
1.当不加order by时,就是一个组里的所有值sum的结果。
2.当加上order by 时, 从一个组里的第一行加,第二行就是第一行加第二行,一直加到此组里最后一行。所有你分别升序和降序的结果不同。
建表
create table myFirst
(
ENAME VARCHAR2(50),
JOB VARCHAR2(50),
SAL NUMBER(10,2),
SALE_DATE DATE
);--查看数据
select * from myFirst;SMITH CLERK 800 2004-10-1 2:01:01
BLAKE MANAGER 100 2004-10-2 2:01:05
JONES MANAGER 200 2004-10-1 2:01:08
WARD SALESMAN 200 2004-10-3 2:01:08
MARTIN SALESMAN 100 2014-12-1 2:01:08
ALLEN SALESMAN 300 2008-9-1 2:01:08--用AVG的倒序分析
SELECT
A.*,
avg(SAL) OVER(PARTITION BY JOB ORDER BY SAL desc) SUMA
FROM
myFirst A;SMITH CLERK 800 2004-10-1 2:01:01 800
JONES MANAGER 200 2004-10-1 2:01:08 200
BLAKE MANAGER 100 2004-10-2 2:01:05 150
ALLEN SALESMAN 300 2008-9-1 2:01:08 300
WARD SALESMAN 200 2004-10-3 2:01:08 250
MARTIN SALESMAN 100 2014-12-1 2:01:08 200--再用正序分析
SELECT
A.*,
avg(SAL) OVER(PARTITION BY JOB ORDER BY SAL ASC) SUMA
FROM
myFirst A; SMITH CLERK 800 2004-10-1 2:01:01 800
BLAKE MANAGER 100 2004-10-2 2:01:05 100
JONES MANAGER 200 2004-10-1 2:01:08 150
MARTIN SALESMAN 100 2014-12-1 2:01:08 100
WARD SALESMAN 200 2004-10-3 2:01:08 150
ALLEN SALESMAN 300 2008-9-1 2:01:08 200
楼主可以仔细看哈数据就明白了其中的机制,关注顺序。出现你那种情况其实主要是ASC起作用后,你没有理解到DESC的作用。