2014-04-29 80 views
0

提供這種數據庫結構如何寫一個查詢來查找只有男性和女性顧客的電影?同一列中的SQL多個值

movie 
    movID 
    name 
ticket 
    TID 
    movID 
    patronID 
patron 
    PID 
    gender 
+0

http://stackoverflow.com/questions/19499472/sql-query-get-multiple-values-from-same-column-for-one-row – Catmandu

+0

你有什麼這麼遠嗎?如果您可以加入表格以有效地獲得所有電影的所有贊助人,那麼您可以計算每個電影的不同性別數量? –

+0

我已經加入了表格,但我不確定如何去執行你所描述的計數步驟。 – sonobenissimo

回答

2

我說做兩個查詢來獲取所有男性顧客和女食客,然後加入基於movID那些:

WITH malePatrons AS 

( 
    SELECT name, m.movID 
    FROM movie JOIN ticket tic ON movie.movID = tic.movID 
    JOIN patron pat ON pat.PID = tic.patronID 
    WHERE pat.gender = "male" 
), femalePatrons AS 

(
    SELECT name, m.movID 
    FROM movie JOIN ticket tic ON movie.movID = tic.movID 
    JOIN patron pat ON pat.PID = tic.patronID 
    WHERE pat.gender = "female" 
) 
    Select * FROM malePatrons JOIN femalePatrons fem ON malePatrons.movID = fem.movID 
0

你並不需要多次查詢表。我的評論可能是一個,但太模糊,但我試圖暗示你對這樣的:

select m.name 
from movie m 
join ticket t on t.movid = m.movid 
join patron p on p.pid = t.patronid 
group by m.movid, m.name 
having count(distinct p.gender) = 2; 

這看起來對所有門票的所有電影,並計算誰擁有這些靠山的不同性別的數量ticketss。 (當然,爲了簡單,當然只有兩種性別;如果你有更多的話可以添加一個過濾器)。 having條款檢查計數是2.如果電影只有男性或女性顧客,而不是兩個,則計數爲1,並且它將被排除在結果之外。

SQL Fiddle demo

0
Select m.movieid, name, count(distinct(gender))as Count 
from 

MOVIE m 
JOIN 
Ticket t 
on m.movid=t.movid 
JOIN 
patron P 
on 
t.patronid=p.Pid 


GROUP BY m.movieid, name 
HAVING count(distinct(gender)) > 1 
相關問題