2015-04-16 6 views
2

Я новичок в SQL и создаю базу данных сайта для проката фильмов. Я должен показать некоторую сводную статистику базы данных, поэтому я планирую показать количество мужчин и женщин, которые отобрали фильмы определенной сертификации для аренды.SQL - количество вхождений слова

Выход я хочу это:

Certificate No. Males No. Females 
----------- --------- ----------- 
U    #   # 
PG    #   # 
12    #   # 
15    #   # 
18    #   # 

Соответствующие таблицы для этого запроса являются:

FILM {FID (PK), Film_Title, Certificate, Date_of_Release} 
MEMBER {MID (PK), ..., Gender} 
LIST {MID (FK), FID (FK)} 

FILM и ЧЛЕН таблица должна быть самопонятны, в то время как LIST является выбор фильмы, которые ЧЛЕН пожелает арендовать. Это как корзина, если хотите. Каждый член имеет только один список, и каждый список может содержать много фильмов. Я пытался придумать запроса, но доступ не позволил бы мне запустить его:

SELECT Gender, COUNT(*) AS Gender_per_Certificate 
FROM (SELECT DISTINCT Film_Title, Certificate, Gender 
FROM (SELECT * 
FROM Film, Member, List 
WHERE Film.FID=List.FID 
AND Member.MID=List.MID) 
WHERE Film_Title IN (SELECT Film_Title 
FROM (SELECT * 
FROM Film, Member, List 
WHERE Film.FID=List.FID 
AND Member.MID=List.MID) 
WHERE Certificate=[Certificate?] 
GROUP BY Certificate)) 
WHERE (((Member.[Gender])="M")) OR ((("F")<>False)) 
GROUP BY Gender; 

Ошибка

Попытка выполнить запрос, который не включает указанное выражение «FID» как часть совокупной функции

Я не уверен, что означает эта ошибка - может ли кто-нибудь объяснить это? Также, как я могу выполнить запрос правильно?

Я понимаю, что это может быть очень простой запрос, который я слишком усложнил, буду признателен за любую помощь, большое спасибо за ваше время заранее!

+3

Похоже, что вы серьезно усложнили этот запрос. – paqogomez

+2

'mysql'' ms-access' различно обновляют вопрос и тег правильно. –

+0

@paqogomez Я тоже так думаю. возможно, я должен использовать JOIN вместо подзапросов? – ting

ответ

3

Если вы используете деловое заявление (IIF в доступе, спасибо @HansUp), чтобы определить, какие мужчины и женщины, группируя по сертификату, вы должны получить свой ответ.

select 
    f.Certificate, 
    sum(IIF(m.[gender] = 'M',1, 0)) as [# of males], 
    sum(IIF(m.[gender] = 'F',1, 0)) as [# of females] 
from 
    (member m 
    inner join list l on m.mid = l.mid) 
    inner join film f on l.fid = f.fid 
group by f.Certificate 
+2

Для доступа к MS используйте 'IIf' вместо' CASE ... WHEN'. Доступ также требует скобок в предложении 'FROM' для запроса, который включает более одного соединения. – HansUp

+0

спасибо @HansUp, задавался вопросом, почему это не сработало. отредактирует его и попробует его сейчас. – ting

+1

@ HansUp Спасибо. Это редактирование должно сделать это. – paqogomez

Смежные вопросы