2

質問と予想される成果を含む練習用ワークシートを使用しています。最後の質問は、私には理解するのが難しいことがわかっています。誰でも助けてください。

質問

従業員の総数と、その総数のうち、2005 年、2006 年、2007 年、および 2008 年に雇用された従業員の数を表示するクエリを作成します。

期待される出力形式

Total 2005 2006 2007 2008
107   29   24   19   11

以下は、個別のクエリで結果を取得するための私の試みです

TO_CHAR(hire_date,'YYYY')
SELECT COUNT(employee_id) AS "Total"
FROM employees;

SELECT COUNT(employee_id) AS "2005"
FROM employees
WHERE TO_CHAR(hire_date,'YYYY') LIKE '2005' GROUP BY TO_CHAR(hire_date,'YYYY') ;

SELECT COUNT(employee_id) AS "2006"
FROM employees
WHERE TO_CHAR(hire_date,'YYYY') LIKE '2006' GROUP BY TO_CHAR(hire_date,'YYYY') ;

SELECT COUNT(employee_id) AS "2007"
FROM employees
WHERE TO_CHAR(hire_date,'YYYY') LIKE '2007' GROUP BY TO_CHAR(hire_date,'YYYY') ;

SELECT COUNT(employee_id) AS "2008"
FROM employees
WHERE TO_CHAR(hire_date,'YYYY') LIKE '2008' GROUP BY TO_CHAR(hire_date,'YYYY') ;

1 つのクエリとして結果を生成するためのヘルプは大歓迎です。

4

2 に答える 2

2

これらを列に入れるには、条件付き集計を使用します。

select count(*) as Total,
       sum(case when to_char(hire_date, 'yyyy') = '2005' then 1 else 0 end) as "2005",
       sum(case when to_char(hire_date, 'yyyy') = '2006' then 1 else 0 end) as "2006",
       sum(case when to_char(hire_date, 'yyyy') = '2007' then 1 else 0 end) as "2007",
       sum(case when to_char(hire_date, 'yyyy') = '2008' then 1 else 0 end) as "2008"
from employees
where to_char(hire_date, 'yyyy') in ('2005', 2006', '2007', '2008')
于 2013-04-01T19:36:00.307 に答える