sql - 初级Oracle SQL计数函数多列

标签 sql oracle function count

我正在查看一份包含问题和预期输出的练习工作表。最后一个问题对我来说很难理解。任何人都可以帮忙吗?

问题

创建一个查询来显示员工总数,其中, 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/

相关文章:

javascript - onchange 和 Select 不起作用

PHP:调用未定义的函数 gzdecode()

c - 如何在 C 中保留函数指针?

sql - Dplyr:在面板数据集上寻找与 NA 的连接

macos - Mac 上的 Oracle Sqlplus 客户端

mysql - 连接表时一对多连接

Oracle Spatial(定位器)- 查找一定距离/半径内的多边形

sql - 过程创建所需的简单初学者 Oracle PL/SQL 帮助/修复

sql - 如何在 VB.NET 中从 SQL 数据库读取全表?

SQL查询按天分组