我是学习数据库的初学者。我搞砸了我的问题,不知道如何解决。任何建议都非常感谢,
这是我的两个桌子:
info:eid(字符串),cid(字符串),qtr(季度),年份(整数)
eid:员工ID
(defund sigma(n)
(cond ((= n 1)1)
(t (+ n(sigma func(1- n))))
是一张表格,其中包含有关给定qtr和年份的每位员工参加了哪些课程的信息。当然只能选一次。
员工的入学率可能存在差距(不必每个季度都参加培训)
我需要弄清楚:
列出每个季度至少有一名员工参加但少于员工参加的课程数量(我想显示qtr,年份,计数(*))
例如,我的输出应如下所示
Info
这是我的代码
qtr year num
-----------------
W 2001 2
W 2002 1
F 2003 1
答案 0 :(得分:0)
好的,这就是您可以做的,首先,您需要能够选择各自年份中所有不同的季度并简单地进行计数。如何实现的就像这样:
SELECT infor.qtr, infor.year , count(distinct(data_a.cid)) as Num
From infor
Inner Join
(SELECT distinct qtr, year, cid, count(eid) as EIDCount
From infor
Group by qtr, year, cid
having count(eid) >= 1 and count(eid) < 3) data_a
on infor.qtry = data_a.qtr and infor.year = data_a.year
group by infor.qtr, infor.year
基本上,您首先需要获得所有至少有一名雇员参加的课程,这是在内部选择中完成的。一旦获得该信息,您就可以通过计算所选择的不同课程来简单地查询输出信息,但可以查询他的时间。
欢呼
答案 1 :(得分:0)
首先获取每个季度每个课程的计数:
select cid, qtr, count(*) as num_employees
from info i
group by cid, qtr;
现在,您希望那些计数介于某些值之间的值。在GROUP BY
之后进行过滤,因此您使用了HAVING
子句:
select cid, qtr, count(*) as num_employees
from info i
group by cid, qtr
having count(*) > 0 and -- redundant because all courses have at least one student to be in the table
count(*) < 3;