计算案件数量

时间:2014-06-27 05:24:40

标签: sql postgresql

我有一个名为Leaves的表格,其中包含Employee IDLeave TypeDate。例如,如果ID = 1234的员工申请2014年6月1日至2014年6月5日的病假,则该日期将存储在休假表中,表示将添加以下记录: 2014年6月1日1234病假 2014年6月2日1234病假 2014年6月3日,1234病假 2014年6月4日,1234病假 2014年6月5日,1234病假 这被视为一个案例。澄清案件的含义:总案例是申请了多少请假申请......例如: enter image description here 我需要的是通过SQL语句获取以下信息(我应该确定一个时期:例如2014年1月1日到2014年12月30日):

病假案例:2

护送假案例:2

研究休假案例:1

我正在使用PostgreSQL 9.2。

5 个答案:

答案 0 :(得分:2)

这个设计有点奇怪,因为这些日常行,如果同一个人有几个护送叶,那么你必须找出不同的情况。

对于这种情况,你可以使用类似的东西

SELECT COUNT(*), leavetype 
FROM (
  SELECT leavetype
  FROM Leaves
  GROUP BY employee_id, leavetype
)
GROUP BY leavetype;

我的建议是对一个案例行使用case_start和case_end日期。

答案 1 :(得分:1)

也许你可以试试这个:

select leave_type, count(*)
from (
  select employee_id, leave_type
  from leaves
  where date between ...
  group by employee_id, leave_type) t
group by leave_type;

答案 2 :(得分:1)

select LeaveType, count(EmployeeID) as TotalCases from(
select EmployeeID, LeaveType, count(LeaveType) as count_LeaveType 
from Leaves 
where Date BETWEEN '2007-02-01' AND '2007-02-31'; 
group by EmployeeID, LeaveType) as A
group by LeaveType, A.EmployeeID

答案 3 :(得分:1)

请找到下面的SQLFiddle

SQL FIDDLE

SELECT leave_type,COUNT(leave_type) FROM
(SELECT leave_type,count(leave_type)
FROM leaves 
WHERE Date BETWEEN '2014-01-01' AND '2014-12-31'
GROUP BY leave_type,emp_id) t
GROUP BY leave_type

希望这能解决您的问题。

答案 4 :(得分:0)

我不确定如何在PostgreSQL中完成此操作,但在MySQL中可以通过以下命令来实现:

<强> QUERY

SELECT  Leave type, count(Leave type) 
FROM Leave 
WHERE (Date BETWEEN  '2014-01-01' AND '2014-12-30' ) 
GROUP BY Leave type