|
2011-8-27 答案BCDEF, 要注意CASE表达式和DECODE不一样。
===================================================
2011-9-3 分析函数
作者:Kim Berg Hansen
难度:高
我创建了如下的表并填入数据:
CREATE TABLE plch_employees
(
employee_id INTEGER
, last_name VARCHAR2 (20)
, salary NUMBER
)
/
BEGIN
INSERT INTO plch_employees
VALUES (100, 'Jobs', 200000);
INSERT INTO plch_employees
VALUES (200, 'Ellison', 300500);
INSERT INTO plch_employees
VALUES (300, 'Gates', 199500);
INSERT INTO plch_employees
VALUES (400, 'Feuerstein', 199400);
INSERT INTO plch_employees
VALUES (500, 'Hansen', 200600);
COMMIT;
END;
/
我老板想要一份员工清单,对每个员工他想知道有多少个其他员工有着相似的薪水(定义为本人薪水 +/- 1000的范围内)
哪些查询能够产生符合要求的结果:
LAST_NAME SALARY SIMILAR
-------------------- ---------- ----------
Jobs 200000 4
Ellison 300500 1
Gates 199500 3
Feuerstein 199400 3
Hansen 200600 2
(A)
SELECT last_name
, salary
, COUNT(*) OVER (
ORDER BY salary
ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) similar
FROM plch_employees
ORDER BY employee_id;
(B)
SELECT last_name
, salary
, COUNT(*) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) similar
FROM plch_employees
ORDER BY employee_id;
(C)
SELECT e.last_name
, e.salary
, ( SELECT COUNT(*)
FROM plch_employees e_similar
WHERE e_similar.salary BETWEEN e.salary - 1000
AND e.salary + 1000
) similar
FROM plch_employees e
ORDER BY e.employee_id;
(D)
SELECT MAX(last_name) last_name
, MAX(salary) salary
, COUNT(*) similar
FROM plch_employees
GROUP BY employee_id
HAVING MIN(salary) BETWEEN MAX(salary) - 1000
AND MAX(salary) + 1000
ORDER BY employee_id;
|
|