SQL - 计算性别的出现次数

时间:2015-04-16 17:03:03

标签: sql ms-access

我是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”作为聚合函数的一部分

我不确定这个错误意味着什么 - 有人可以解释一下吗?另外,如何正确执行查询?

我知道这可能是一个非常简单的查询,我过于复杂,会感激任何帮助,非常感谢你提前的时间!

1 个答案:

答案 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