我正在查看一份包含问题和预期输出的练习工作表。最后一个问题对我来说很难理解。任何人都可以帮忙吗?
问题
创建一个查询来显示员工总数,其中, 2005年、2006年、2007年和2008年雇用的员 worker 数。
预期输出格式
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') ;
任何将结果作为一个查询生成的帮助都将不胜感激。
最佳答案
要将它们放入列中,请使用条件聚合:
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')
关于sql - 初级Oracle SQL计数函数多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750313/