|
|
2011-7-2 答案ACE, 兔子的解说很给力,大家现在都知道了回字有四种写法。
==================================================================
2011-7-9 行列转换
作者:Kim Berg Hansen
难度:中
我创建了这张表并填入数据:
CREATE TABLE plch_employees
(
employee_id INTEGER
, department_id INTEGER
, last_name VARCHAR2 (20)
, salary NUMBER
)
/
BEGIN
INSERT INTO plch_employees
VALUES (100, 100, 'Jobs', 200000);
INSERT INTO plch_employees
VALUES (200, 200, 'Ellison', 300500);
INSERT INTO plch_employees
VALUES (300, 100, 'Gates', 199500);
INSERT INTO plch_employees
VALUES (400, 200, 'Feuerstein', 199400);
INSERT INTO plch_employees
VALUES (500, 200, 'Hansen', 200600);
COMMIT;
END;
/
我老板想知道每个部门有多少个员工赚钱少于250000,多少人大于等于250000。
哪些选项能够产生符合条件的输出:
DEPARTMENT_ID LESS MORE
------------- ---------- ----------
100 2 0
200 2 1
(A)
SELECT *
FROM (
SELECT department_id
, CASE
WHEN salary < 250000 THEN 'LESS'
ELSE 'MORE'
END salary_category
FROM plch_employees
) PIVOT (
COUNT(salary_category)
FOR department_id IN (
100,200
)
);
(B)
SELECT *
FROM (
SELECT department_id
, CASE
WHEN salary < 250000 THEN 'LESS'
ELSE 'MORE'
END salary_category
FROM plch_employees
) PIVOT (
COUNT(*)
FOR salary_category IN (
'LESS' AS less,
'MORE' AS more
)
)
ORDER BY department_id;
(C)
SELECT department_id
, COUNT(salary < 250000) less
, COUNT(salary >= 250000) more
FROM plch_employees
GROUP BY department_id
ORDER BY department_id;
(D)
SELECT department_id
, COUNT(
CASE
WHEN salary < 250000 THEN 1
END
) less
, COUNT(
CASE
WHEN salary >= 250000 THEN 1
END
) more
FROM plch_employees
GROUP BY department_id
ORDER BY department_id;
(E)
SELECT *
FROM (
SELECT department_id
, CASE
WHEN salary < 250000 THEN 'LESS'
ELSE 'MORE'
END salary_category
FROM plch_employees
) PIVOT (
COUNT(*)
FOR salary_category IN (
'LESS',
'MORE'
)
)
ORDER BY department_id;
(F)
SELECT department_id
, COUNT(
CASE
WHEN salary < 250000 THEN 1
ELSE 0
END
) less
, COUNT(
CASE
WHEN salary >= 250000 THEN 1
ELSE 0
END
) more
FROM plch_employees
GROUP BY department_id
ORDER BY department_id;
|
|