2012-10-17 58 views
1

我有2個表,人與電影LEFT JOIN有我難倒

的人表有ID和性別,以及電影表有ID,movie_type和movie_attended。 genderID和movie_attended可以爲null。

我想要創建一個將返回3列的查詢:gender,movie_attended(但它必須是一段浪漫電影),以及具有該性別和movie_attended的人數。

現在我有

select person.gender, movie.movie_attended, count(person.gender) 
from person left join movie 
on person.ID = movie.ID 
where movie.movie_type = "romance" 
order by person.gender DESC 

可惜,這只是給我的一行信息。如果我刪除count(person.gender),則會得到太多行。可以說只有3部浪漫電影可供選擇。第二排:男 - 卡薩布蘭卡 - 8.第三排:男 - 羅密歐&朱麗葉 - 2.第四排:男 - 無 - 2

然後從頭開始女

謝謝

回答

0
select gender, count(person.gender), movie.movie_attended 
from person left join movie 
on person.movie_id = movie.movie_id # or whatever it is called. 
where movie.movie_type = "romance" 
group by person.gender 
+0

這給了我3行,一個男性,一個女性,一個爲空。不幸的是,只有1部電影正在播出。 – Atopiclate

0

我很驚訝,你成功地運行該查詢爲你缺少一個聲明「按組」,當您使用聚合函數,它始終是必需的。 'group by'語句應該包含與'select'語句相同的字段,但不包含聚合函數。

select person.gender, movie.movie_attended, count(person.gender) 
from person left join movie 
on person.ID = movie.ID 
where movie.movie_type = "romance" 
group by person.gender, movie.movie_attended 
order by count (person.gender) DESC 

我已經更改了您的'order by'語句作爲您提供的數據,表明查詢按結果數量排序,而不是按性別排序。

我覺得奇怪,我說person.id應該等於movie.id。在數據庫結構方面,有一張人物表,一張電影表和一張由people.id和movie.id構成的加入表格似乎更實用,其中存儲了哪些人看過哪些電影的列表。

+0

謝謝!我只是想到了自己。這是我正在處理的最後一個問題。 movie.movi​​e_attended不顯示「空」值,肯定應該有一些。編輯:我應該刪除person.ID = movie.ID?我認爲這就是問題 – Atopiclate

+0

如果你刪除'person.id = movie.id'這一行,那麼表之間就沒有任何聯繫!假設你採用三表的態度,那麼你的查詢將是'select person.gender,從內部加入考勤人數(*)person.id = attendance.person內部加入電影上考勤。電影= movies.id在哪裏電影.movi​​e_type =「romance」group by person.gender order by person.gender,count(*)desc'。根本不需要左連接。 –