一个很好的选择查询,包括计数
问题描述:
我有大约20个表格,包括学生的考试记录。我试图找出我的问题 (学号= SID,即1分:S1): StudentsTables:(学生reg.data)一个很好的选择查询,包括计数
sID name surname regDate photo ........
891 Mike Jackson 01.01.2013 82342984.png ....
表A:(学生的分数)
sID exam s1 s2 s3 s4
891 6 0 0 0 20 > student 891 attended exam 6
891 10 30 80 100 75 > student 891 attended exam 10
(计数= 2)
表B:(学生文件,即:文献1:D1)
sID d1 d2 d3 d4 d5 d6
891 true false true true true true
(计数= 1)
表C:(学生消息)
mID from to subject message
1 10 891 any sub. any message... > student 891 received messages (look "to")
1 10 891 mes2 other message...
1 29 891 mes3 another message...
(计数= 3)
提交:(学生付款)
sID pID amount date details
(无学生记录在这个表中,count = 0)
.....和类似的表如上。
我想要的结果如下图所示:
sID name surname scoreCount docCount messageCount paymentCount .....
891 Mike Jackson 2 1 3 0 ...
892 Susan Button 0 3 10 0 ...
893 Ahmad Malisi 1 0 5 2 ...
894 any any 4 1 0 0 ...
...
..
答
你有没有试过这种
Select sid,name,surname,
(Select count(*) From student_scores Where Sid = S.Sid) as scoreCount ,
(Select count(*) From student_documents Where Sid = S.Sid) as docCount ,
(Select count(*) From student_messages Where to= S.Sid) as messageCount ,
(Select count(*) From student_payments Where Sid = S.Sid) as paymentCount ,
.
.
.
From StudentsTables S
Where Sid=891
+0
它reall工作!但我有一些关于性能的担忧,我有大约50K r ecords和它返回数据有点晚:(任何想法? –
答
Select sid,name,surname,
isnull(sscnt,0) ,isnull(sdcnt ,0) ,isnull(spcnt ,0) ,isnull(smcnt,0)
From StudentsTables S
join (Select Sid,count(Sid) sscnt From student_scores group by Sid) ss
on ss.sid=s.sid
join (Select Sid,count(Sid) sdcnt From student_documents group by Sid) sd
on sd.sid=s.sid
join (Select Sid,count(Sid) spcnt From student_payments group by Sid) sp
on sp.sid=s.sid
join (Select Sid,count(Sid) smcnt From student_messages group by Sid) sm
on sm.sid=s.sid
这将查询所有SID(S)
我不喜欢加单独选择查询,因为表是相当大的:( –