我有一个名为Leaves
的表格,其中包含Employee ID
,Leave Type
和Date
。例如,如果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病假
这被视为一个案例。澄清案件的含义:总案例是申请了多少请假申请......例如:
我需要的是通过SQL语句获取以下信息(我应该确定一个时期:例如2014年1月1日到2014年12月30日):
病假案例:2
护送假案例:2
研究休假案例:1
我正在使用PostgreSQL 9.2。
答案 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
。
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