【问题标题】:Average score for a given name within the current month当月给定名称的平均分数
【发布时间】:2019-02-20 21:58:11
【问题描述】:

我有一个表格数据集,其中包含本年度每次通话的客户服务代表得分,我正在尝试构建一个查询来计算给定名称在给定月份内的平均得分

类似于计算马特 1 月份通话的平均分数。

我一直在尝试,但我是 SQL 的初学者,所以我遇到了麻烦。

到目前为止,我得到了这个:

Select avg("general score") as General_Score, avg("Re_score") as Re_score 
from Voc2019 
Where [Name] ="Matt"

这给了我一个错误类型不匹配

非常感谢您能提供给我的任何帮助。

更新:

代码现在可以工作了,但是虽然这确实有效,但我仍然需要在给定日期之前订购,但我想使用这个 sql 字符串来检索指定月份的平均值,该月份在我想要从 excel 中指定的月份有所不同,但它没有返回任何结果

例如,我想要 Matt 一月份的平均得分

目前我得到了

Select avg([general score]) as general_score, ("Re_score") as Re_score 
from Voc2019 
Where [Name] ="Matt" and Score_Date = Month(2) 

【问题讨论】:

  • 您对问题的更新似乎无视给出的答案已经提供的建议。此外,Month 函数需要一个日期参数,它将返回月份数。
  • 对不起,我没有考虑到这不是我的意图,我正在按照您在访问中描述的方式使用它,但是有没有办法使用中间功能或其他东西,因为它是基于文本的

标签: sql ms-access


【解决方案1】:

您的代码的主要问题是您在尝试引用字段时使用了字符串 ("general score")(这可能会产生类型不匹配错误)。

您没有在表中指明包含每条记录的日期的字段,因此如果没有这些信息,就不可能为给定月份选择适当的记录集。

但是,为了更正您当前的代码,我建议如下:

select avg(voc2019.[general score]) as General_Score, avg(voc2019.re_score) as Re_score 
from voc2019 
where voc2019.name = "Matt"

如果您要识别包含每条记录的日期的字段,您可以使用以下方法计算每月平均值:

select 
    dateserial(year(voc2019.date), month(voc2019.date), 1) as [Month],
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt"
group by
    dateserial(year(voc2019.date), month(voc2019.date), 1)

以上假设您的表 voc2019 包含一个名为 date 的字段,用于与每条记录约会。

编辑:

由于您的日期实际上存储为文本字段而不是日期字段,因此您可以使用DateValue 函数将文本内容解析为日期值。

因此,要获得 Matt 在 1 月份的平均分数,您可以使用类似以下的方法:

select 
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt" and 
    month(datevalue(voc2019.date)) = 1 and
    year(datevalue(voc2019.date)) = 2019

或者,由于您的日期存储为文本,您可以使用like 运算符仅匹配一月份的日期,例如:

select 
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt" and voc2019.date like "##-01-2019"

【讨论】:

  • 是的,我确实省略了 where 部分,因为我不知道如何引用日期我确实有一个字符串格式的日期字段,因为我下班了,没有获取文件的方法我会尽快尝试并回复您。但是你的解释太棒了,它肯定会有很大帮助。谢谢!
  • @Aeon 您在哪里声明 “我有一个字符串格式的日期字段” 是您的字段的数据类型 日期/时间 还是 文字?
  • 这是文本,我现在要检查您的解决方案
  • 两个答案都是正确的 我选择的答案对特定访问 sql 有效 @JasonInVegas 答案对于常规 sql 是正确的 我将这两个答案用于不同的目的 有没有办法同时记入两者?最后非常感谢你们俩,我从中学到了很多东西,尤其是引号和双引号的区别
  • 更新了我的问题
【解决方案2】:

我更熟悉 Oracle SQL 语法,但很确定问题出在 simple MS Access syntax 上。您的文字字符串 "Matt" 应该像在 'Matt' 中一样单引号,并且方括号仅在包含空格时用于将列标识符括起来。

试试:

Select avg([general score]) as General_Score, avg(Re_score) as Re_score 
from Voc2019 
Where Name = 'Matt'

【讨论】:

  • 更新了我的问题
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多