我正在努力获得我们的学生在责任和合作任务方面的平均分数。问题是,责任和协作任务可以被称为不同的东西,比如“音乐中的协作”和“数学中的协作”,但它们的名字中仍然有‘责任’或‘协作’。因此,当我运行下面的查询时,我得到多个与协作相关的任务的结果和多个责任任务的结果。我需要一个平均责任和一个合作。有什么建议吗?我有SQL Server。
SELECT gradingscores.task AS task,
avg(Cast(gradingscores.score AS decimal) as averages
FROM gradingscores
WHERE isnumeric(gradingscores.score) = 1
AND task LIKE %responsibility%
OR task LIKE %collaboration%
所以我的结果是:
任务平均在音乐中的责任4.0数学中的责任3.5英语3.0在音乐方面的合作3.5在第2.5条中的合作
我希望我的结果看起来像:
任务平均责任4.0协作3.5
评分也是在varchar,需要转换为数字,贴现任何非数字的数据。
发布于 2016-05-25 13:35:17
我意识到,我只需要从Select语句中删除任务名称,并对责任和协作级别进行单独的查询。通过这种方式,它会自动将所有有责任或协作的任务分组。
SELECT avg(Cast(gradingscores.score AS decimal) as averages
FROM gradingscores
WHERE isnumeric(gradingscores.score) = 1
AND task LIKE %responsibility%
发布于 2016-05-25 04:41:40
您应该能够按任务的前14个字母分组,并有一个rtrim来消除协作上的额外空间(13个字母)。
“where”将确保它只获得协作或负责的条目。
SELECT RTRIM(LEFT(gradingscores.task, 14) AS task,
cast(avg(Cast(gradingscores.score AS decimal(10,1)) as decimal(10,1)) as averages
FROM gradingscores
WHERE isnumeric(gradingscores.score) = 1
AND task LIKE 'responsibility%'
OR task LIKE 'collaboration%'
GROUP BY RTRIM(LEFT(gradingscores.task, 14)
https://stackoverflow.com/questions/37420519
复制相似问题