弄乱有关count(*)和多个表的SQL查询问题

时间:2018-10-27 00:45:04

标签: sql sqlite

我是学习数据库的初学者。我搞砸了我的问题,不知道如何解决。任何建议都非常感谢,

这是我的两个桌子:

  • 员工:开斋节(字符串)
  • info:eid(字符串),cid(字符串),qtr(季度),年份(整数)

  • eid:员工ID

  • cid:课程ID(员工参加的课程)
  • qtr:季度(春季,冬季,夏季)

(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

2 个答案:

答案 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;