我是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和MEMBER表应该是不言自明的,而LIST是会员希望租借的精选电影。如果你愿意,它就像一个购物篮。每个成员只有一个列表,每个列表可以包含许多电影。我试图提出一个查询,但Access不允许我运行它:
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”作为聚合函数的一部分
我不确定这个错误意味着什么 - 有人可以解释一下吗?另外,如何正确执行查询?
我知道这可能是一个非常简单的查询,我过于复杂,会感激任何帮助,非常感谢你提前的时间!
答案 0 :(得分: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