|
|
2011-12-03 答案AC。A用触发器是个笨办法不值得推荐。
B:不满足自动删除子表的需求。
D:父子方向搞反了。
=================================================
2011-12-10 RANGE和ROWS窗口
作者:Patrick Barel
难度:高
我创建了如下的表并填入数据:
CREATE TABLE plch_emp
(
ename VARCHAR2 (10)
, sal NUMBER (7, 2)
, deptno NUMBER (2)
)
/
INSERT INTO plch_emp VALUES ('MILLER', 1300, 10);
INSERT INTO plch_emp VALUES ('CLARK', 2450, 10);
INSERT INTO plch_emp VALUES ('KING', 5000, 10);
INSERT INTO plch_emp VALUES ('SMITH', 800, 20);
INSERT INTO plch_emp VALUES ('ADAMS', 1100, 20);
INSERT INTO plch_emp VALUES ('JONES', 2975, 20);
INSERT INTO plch_emp VALUES ('FORD', 3000, 20);
INSERT INTO plch_emp VALUES ('SCOTT', 3000, 20);
COMMIT;
哪些选项会显示当前部门按工资排序后的逐行小计,在执行后你会看到如下输出:
DEPTNO ENAME RUNNING_TOTAL
------------- ---------- -------------
10 MILLER 1300
10 CLARK 3750
10 KING 8750
20 SMITH 800
20 ADAMS 1900
20 JONES 4875
20 FORD 7875
20 SCOTT 10875
或者:
DEPTNO ENAME RUNNING_TOTAL
------------- ---------- -------------
10 MILLER 1300
10 CLARK 3750
10 KING 8750
20 SMITH 800
20 ADAMS 1900
20 JONES 4875
20 SCOTT 7875
20 FORD 10875
(A)
SELECT deptno
, ename
, SUM (sal)
OVER
( PARTITION BY deptno
ORDER BY sal
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING
) as running_total
FROM plch_emp
ORDER BY deptno, running_total
(B)
SELECT deptno
, ename
, SUM (sal)
OVER
( PARTITION BY deptno
ORDER BY sal
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW
) as running_total
FROM plch_emp
ORDER BY deptno, running_total
/
(C)
SELECT deptno
, ename
, SUM (sal)
OVER
( PARTITION BY deptno
ORDER BY sal
) as running_total
FROM plch_emp
ORDER BY deptno, running_total
(D)
SELECT deptno
, ename
, SUM (sal)
OVER
( PARTITION BY deptno
ORDER BY sal
ROWS BETWEEN CURRENT ROW
AND UNBOUNDED FOLLOWING
) as running_total
FROM plch_emp
ORDER BY deptno, running_total |
|