SQL語法問題

問題:顯示課程名稱和計算每一門課程有多少位學生選修
2009-12-15 9:52 發佈
s211322 wrote:
問題:顯示課程名稱和...(恕刪)


select A.tittle,(Select Count(sid) From classes Where c_no = A.c_no) As pCount from courses As A GROUP BY A.tittle

試試看...

s211322 wrote:
問題:顯示課程名稱和...(恕刪)


試試看這個

select a.tittle, count(b.c_no) AS studentcount from courses as a left join classes as b on a.c_no = b.c_no group by a.tittle
pilot0401大大的答案有些問題

訊息 8120,層級 16,狀態 1,行 1
資料行 'courses.c_no' 在選取清單中無效,因為它並未包含在彙總函數或 GROUP BY 子句中。

我後來有做出一個

select tittle, count( * ) as 人數
from courses inner join classes
on courses.c_no = classes.c_no
group by tittle

而dino0315大大的答案完全正確
差別在於一個有顯示0人數的科目一個沒有

select a.tittle, count(b.c_no) AS 人數 //這邊count(b.c_no) 如果我改成count( * ) 答案會不同為什麼?
from
courses as a
left join
classes as b
on a.c_no = b.c_no
group by a.tittle

請問一下
我會做是會做
不過想法我完全不懂
可以解釋一下嗎?

我知道有
inner join
left join
right join
full join
可是不會使用...
s211322 wrote:
pilot0401大...(恕刪)


你跑一下
select a.c_no, a.titile, b.sid, b.c_no as b_c_no
from courses a left join classes b on a.c_no = b.c_no

比對每一筆的資料 就會知道 Count(...) as 人數 數字結果等於出現的資料筆數

inner join 可視為交集... (兩邊都有資料)
left join 就是 left 一定都要出現 (無論右邊的 table 有無資料)

用 inner join 或 left join 要看你輸出的樣子
inner join 表示 有學生選課的課程才出現
left join 表示, 所有課程都顯示, 無論有沒有學生選課
Nikon D90(MB-D80) + 17-55 + 28-70 + N35.2 + N50.4 + SB-800(SD-8A) + T124
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?