2016-03-01 77 views
0

我有两个表SQL查询问题的计数功能上的子查询

BatchDetails

BatchCode MaxStd 
------------------ 
B001   12 
B002   14 
B003   10 

AdmissionBatch

Batch Rollno 
--------------- 
B001 1 
B001 2 
B002 3 
B003 4 
B003 5 

我需要这些批次的BatchCode都没有最多的学生。我写了一个查询,但它不工作

select 
    batchCode, MaxStd, count(rollno) 
from 
    BatchDetails as a 
join 
    AdmissionBatch as b on a.batchcode = b.batch 
group by 
    batchcode, maxStd 
having 
    count(rollno) < maxSTD 

此查询不是因为工作,如果没有学生在某一批次,则批次将不会出现

我试图子查询很好,但没有帮助

请帮忙

+0

的答案也许是一个解决方案了,但我也有疑惑......究竟什么是你试图实现?比方说,'BatchDetails'中没有BatchCode'B002'的行。预期产出会是多少?什么,如果MaxStd是零(或'NULL')? – Shnugo

回答

1

使用左连接而不是内连接。

select batchCode,MaxStd, count(rollno) from BatchDetails as a 
LEFT JOIN AdmissionBatch as b on a.batchcode=b.batch 
group by batchcode,maxStd 
having count(rollno)< maxSTD 
1

你需要一个左连接,以保持结果,即使没有匹配:

select batchCode,MaxStd, count(rollno) 
from BatchDetails as a 
left outer join AdmissionBatch as b 
on a.batchcode=b.batch 
group by batchcode,maxStd 
having count(rollno)< maxSTD