Sql 寻找性别的活动水平

Sql 寻找性别的活动水平,sql,ms-access,Sql,Ms Access,我有两张桌子: Membership mID StartingDate Name Address Gender EndingDate 及 我试图找出每个性别的活动水平,但到目前为止,我没有太多的运气 以下是我迄今为止所尝试的: SELECT Membership.Gender, [Circulation Info].mID, Membership.mID FROM [Circulation Info] AS c INNER JOIN Membership

我有两张桌子:

Membership
mID     StartingDate    Name     Address     Gender      EndingDate

我试图找出每个性别的活动水平,但到目前为止,我没有太多的运气

以下是我迄今为止所尝试的:

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'

原因是您为表设置了别名,但随后使用表名作为列名前缀,而不是别名。试试这个:

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()
,等等)

我不明白为什么在
选择
列表中同时需要
c.mID
m.mID
;它们在每一行中应该是相同的。还考虑移动轨范,<代码> m=性别=f \代码>,从<<代码> < <代码> > <代码> < <代码>子句> < /p>
选择m.mID,计数(*)作为活动级别
从…起
[流通信息]作为c
作为m的内部联接成员
在c.mID=m.mID上
其中m.Gender='F'
m.mID分组;

除了关于表别名的问题(当您为表别名时,必须使用该别名而不是表名来限定字段名),我认为您需要一个
Count()
函数来为您提供“活动级别”

另请注意,Access通常会抱怨
SELECT
子句中的任何字段表达式,这些表达式未包含在
GROUP BY
中,并且不是聚合表达式(
Min()
Max()
Count()
,等等)

我不明白为什么在
选择
列表中同时需要
c.mID
m.mID
;它们在每一行中应该是相同的。还考虑移动轨范,<代码> m=性别=f \代码>,从<<代码> < <代码> > <代码> < <代码>子句> < /p>
选择m.mID,计数(*)作为活动级别
从…起
[流通信息]作为c
作为m的内部联接成员
在c.mID=m.mID上
其中m.Gender='F'
m.mID分组;

Access可能会抱怨
SELECT
子句中的
m.Gender
c.mID
,因为它们不包括在
groupby
中,也不是聚合表达式。但是我不确定在
选择中是否需要这两个选项。。。将
m.Gender='F'
HAVING
移动到
WHERE
。似乎OP还需要一个
Count(*)
选择中的表达式。我收到一条消息,说我尝试执行的查询未将指定的表达式“Gender”作为聚合函数的一部分。为避免此错误,您应将m.Gender包含到GROUP BY中,或对m.Gender应用一些聚合函数。请您解释一下您希望获得哪种输出?Access可能会抱怨
SELECT
子句中的
m.Gender
c.mID
,因为它们不包括在
GROUP BY
中,也不是聚合表达式。但是我不确定在
选择中是否需要这两个选项。。。将
m.Gender='F'
HAVING
移动到
WHERE
。似乎OP还需要一个
Count(*)
选择中的表达式。我收到一条消息,说我尝试执行的查询未将指定的表达式“Gender”作为聚合函数的一部分。为避免此错误,您应将m.Gender包含到GROUP BY中,或对m.Gender应用一些聚合函数。请您解释一下,您希望获得哪种类型的输出?我收到一条消息说,我尝试执行的查询没有将指定的表达式“Gender”作为聚合函数的一部分。为避免此错误,您应该将m.Gender包含到GROUP BY中,或者对m.Gender应用一些聚合函数。请您解释一下,您希望获得哪种类型的输出?我收到一条消息说,我尝试执行的查询没有将指定的表达式“Gender”作为聚合函数的一部分。为避免此错误,您应该将m.Gender包含到GROUP BY中,或者对m.Gender应用一些聚合函数。请你解释一下你想要什么样的产出?