【问题标题】:MS Access Using Counts and Sum in Two TablesMS Access 在两个表中使用计数和总和
【发布时间】:2014-10-15 07:02:30
【问题描述】:

我有两张表,其中一张包含有关团队的信息,名为 TEAMS,如下所示:

TEAMS

Name|City|Attendance

Jets   NY  50

等等

另一个保存有关所玩游戏的信息,名为 GAMES:

GAMES

Home|Visitors|Date|Result

Jets  Broncos  1/1/2012  Tie

等等

我正在尝试设置一个查询,打印 GAMES 表中列出的月份中的哪一天,然后是当天的游戏数量,然后是当天玩的游戏的总出席人数。

现在我可以创建查询,打印出当月的哪一天和当天玩的游戏,但是当我尝试添加当天的出勤列时,它根本无法正确显示。这是我当前的查询:

SELECT Day(Date) AS [Day of Week], Count(Day(Date)) AS [Games on Day]
FROM GAMES
GROUP BY Day(Date);

如果我简单地将Sum(Attendance) 添加到SELECT,然后将TEAMS 添加到FROM,则出勤人数看起来是TEAMS 中的出勤总数乘以游戏数那天玩。任何有关如何解决此问题的帮助将不胜感激,谢谢!

【问题讨论】:

  • 出席人数不应该是比赛的属性而不是团队的属性吗?
  • 列是不可更改的,是教授设置的,不过我不同意你的观点。

标签: sql ms-access


【解决方案1】:

您需要在 GAMES 和 TEAM 之间使用Inner JOIN,因为您的出席是 TEAM 的一部分。

SELECT Day(G.Date) AS [Day of Week], Count(Day(G.Date)) AS [Games on Day], Sum(Attendance)
FROM GAMES G
INNER JOIN TEAM T
On G.HOME = T.NAME
GROUP BY Day(Date)

另外,如果您按DAY(Date) 分组,您只会得到一个月中的某一天(因此对于 2014 年 8 月 12 日,您只会得到12)。当 2014 年 8 月 12 日和 2015 年 1 月 12 日在同一赛季有比赛时会发生什么?您将获得在这两个日期进行的游戏总数。仔细检查以确保这是您真正想要的。

此外,参加比赛的人数可能因比赛而异。例如,在预测恶劣天气的情况下,您可能没有售罄的人群。我认为您应该将Attendance 列移至GAME

编辑

回答cmets中的问题

SELECT Count(Day(G.Date)) AS [Games on Day], Sum(Attendance)
FROM GAMES G
INNER JOIN TEAM T
    On G.HOME = T.NAME
WHERE G.DATE Between '01/01/2010' and '12/31/2010'
GROUP BY Day(Date)

【讨论】:

  • 感谢 raj,这行得通。我是 sql 新手,因此对所有命令都不是很好,忘记了加入。天气等变量在生活中是现实的,但这只是一个简单的数据库,谢谢。
  • 所以我现在了解如何为单日期实体执行此操作,但是如果我想执行相同的查询但现在检查特定月份和年份的已玩游戏和出勤率,我该怎么做?示例:查找 2010 年 1 月至 2010 年 12 月的比赛和出勤率。我应该使用视图吗?
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多