具有count()的子句和子查询中的条件

时间:2015-08-06 17:12:58

标签: sql sql-server database

表:类

id   Institute_id     Name  
------------------------------
1    1                MCAL - 1  
2    1                MCAL - 2
3    1                BCA - 1
4    1                BCA - 2

表:群组

id  Class_Id   Institute_Id   Name          Status
--------------------------------------------------
1   1           1             PHP           false   
2   2           1             JAVA          false               
3   1           1             ORACLE        false
4   2           1             LINUX         true
5   2           1             ASP.NET       false   
6   3           1             OS            false
7   4           2             CPP           false

预期结果:

id    Name          Count(*)
-----------------------------

1     MCAL - 1        2
2     MCAL - 2        2
3     BCA - 1         1
4     BCA - 2         0
  

注意:仅计算来自Institute_Id = 1且Status = false

的组的记录

2 个答案:

答案 0 :(得分:0)

请试试这个

 Select 
    c.id,
    c.name, 
    SUM(case when g.class_id is NULL then 0 else 1 end) as count 
from class c left join groups g 
   on c.id=g.class_id 
     and g.status='false' 
     and g.Institute_id=1
group by c.id,c.name
order by c.id

小提琴链接:http://sqlfiddle.com/#!6/2b992/6

答案 1 :(得分:0)

要使用外部联接正确计数,请在COUNT()中指定列名而不是*。

SELECT C.id, C.Name, [Count] = COUNT(G.Status)
FROM Class C
LEFT JOIN Groups G ON C.id = G.Class_id AND G.Institute_id = 1 AND G.Status = 'false'
GROUP BY C.id, C.Name
ORDER BY C.id