PDA

View Full Version : چگونگي استفاده از دستور count



elham1985
یک شنبه 20 فروردین 1391, 14:57 عصر
با سلام.
من دو تا جدول دارم كه توي يكيش اطلاعات دروس پاس شده و توي يك جدول ديگه تعداد دانش آموزاني كه دروس را انتخاب كرده اند نمايش ميدهد.
من ميخوام يه select داشته باشم كه :
تعداد دانش آموزاني كه هر درس را انتخاب كرده اند+تعداد دانش آموزاني كه اين درس را پاس كرده اند
را نشان دهد.
من چه جوري ميتونم اين كارو بكنم؟

p.yazdkhasti
یک شنبه 20 فروردین 1391, 15:02 عصر
سلام
لطفا ساختار Table های خود را اعلام نمایید تا بتوان دقیق تر شما را راهنمایی کرد.

elham1985
سه شنبه 22 فروردین 1391, 11:48 صبح
ممنون.
ساختارشون:

Register_tbl(Lesson_code,Lesson_name,lesson_Inf,.. .)

Less_tbl(Lesson_code,lesson_statuse,...)



من خودم اينجوري نوشتم:

select count(lesson_name),lesson name
fromRegister_tbl
groupby lesson_name

ولي اين فقط روي يك جدول و فقط تعداد دانش آموزاني رو كه درس رو گرفتن نشون ميده.نميدونم چه جوري joinكنم و count رو بنويسم كه تعداد پاس شده ها رو هم بده.

p.yazdkhasti
سه شنبه 22 فروردین 1391, 16:33 عصر
سلام
قبل از پاسخ گویی به سوال شما باید بگویم که شما باید یک Table برای دروس داشته باشید، یک Table برای دانش آموزان و یک Table دیگر برای ثبت اطلاعات ثبت نام و نحوه گذارندن دروس مانند Register_tbl توسط شما. با در نظر گرفتن این ساختار نام درس باید در Table دروس باشد نه در Table مربوط به ثبت نام. چندین روش برای Query مورد نظر شما وجود دارد. بعضی از روش ها به صورت زیر است:

روش اول:


SELECT l.Name ,COUNT(r.LessonId) AS RegisteredCount,COUNT(rp.LessonId) AS PassedCount
FROM Less_tbl AS L LEFT JOIN Register_tbl AS r ON l.LessonId=r.LessonId
LEFT JOIN Register_tbl AS rp ON (r.LessonId=rp.LessonId AND rp.Status='[Passed Status]' AND r.studentid=rp.studentid)
GROUP BY l.Name


روش دوم:

SELECT l.Name,( select count(*) from Register_tbl where Register_tbl.Lessonid= l.lessonId) as TotalCount,
( select count(*) from Register_tbl where Register_tbl.Lessonid= l.lessonId and Register_tbl.Status=0 ) as PassedCount
FROM Less_tbl as l