[英]Finding Activity level of gender
我有两个表:
Membership
mID StartingDate Name Address Gender EndingDate
和
Circulation Info
ISBN mID DateOfBorrow DateOfReturn DateOfLoss
我正在尝试找到每种性别的活动水平,但是到目前为止,我还没有那么幸运。
到目前为止,这是我尝试过的:
SELECT Membership.Gender, [Circulation Info].mID, Membership.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON [Circulation Info].mID = Membership.mID
GROUP BY m.mID
HAVING Membership.Gender='F'
尝试运行此语法时,我收到语法错误,它将我带到第一行的“流通信息”。
原因是您为表设置了别名,但是使用表名作为列名的前缀而不是别名。 尝试这个:
SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F';
您正在为表使用别名,因此请使用别名。
SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F'
除了关于表别名的问题(当给表加上别名时,必须使用该别名而不是表名来限定字段名),我认为您还希望Count()
函数为您提供“活动级别” 。
另请注意,Access通常会抱怨SELECT
子句中的任何字段表达式,该字段表达式不包含在GROUP BY
,也不是聚合表达式( Min()
, Max()
, Count()
等)。
我不明白为什么在SELECT
列表中需要同时使用c.mID
和m.mID
。 每行应该相同。 还可以考虑将标准m.Gender='F'
从HAVING
移到WHERE
子句。
SELECT m.mID, Count(*) AS activity_level
FROM
[Circulation Info] AS c
INNER JOIN Membership AS m
ON c.mID = m.mID
WHERE m.Gender='F'
GROUP BY m.mID;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.