此代码中的IF语句有什么问题?

时间:2020-08-31 16:16:08

标签: sql sum mariadb max average

select studentid,
sum(score) 'Total',
avg(IF(score>85)) 'Average',
max(score) 'Maximum',
min(score) 'Minimum'
from results
group by studentid;

错误消息:

您的SQL语法有误;检查手册 对应于您的MariaDB服务器版本,以使用正确的语法 '))'平均'附近

max(score)'Maximum',

2 个答案:

答案 0 :(得分:2)

您没有正确使用if()函数-您不应该使用单引号对结果集中的列进行别名。

您可能想要:

select 
    studentid,
    sum(score) Total,
    avg(score > 85) Average,
    max(score) Maximum,
    min(score) Minimum
from results
group by studentid;

avg(score > 85)为您提供得分高于85的比率,为01之间的十进制数。

另一方面,如果您希望平均分数高于85,则可以:

    avg(case when score > 85 then score end) Average

答案 1 :(得分:2)

如果您希望分数比超过85,请使用case表达式:

select studentid, sum(score) as Total,
       avg(case when score > 85 then 1 else 0 end) as ratio_over_85,
       max(score) as Maximum, min(score) as Minimum
from results
group by studentid;

或使用快捷方式:

       avg( score > 85 ) as ratio_over_85,

此外,不要对列名使用单引号;仅将它们用于字符串和日期常量。