我正在尝试在经典asp中创建AVG
学生成绩。这是我的学生表:
Name Q1 Q2 -------------- John 92 84 John 89 0 John 0 0
这是我的SQL查询:
SELECT Name, SUM(Q1)/count(*) AS Q1, SUM(Q2)/count(*) AS Q2
FROM table Student
" 0"不应该被计算在内。
Q1应为
92+89/2
或Q2应
84/1
然而,两者的结果总是除以3
如何从具有0
的任何行中减去1?
答案 0 :(得分:13)
首先,使用AVG
代替SUM
- 它会为您完成所有工作。
要忽略您的情况下的零分(Q1可能为零而Q2为零),请使用NULLIF
function将零更改为空。在计算平均值时,SQL将忽略空值:
SELECT
Name,
AVG(NULLIF(Q1, 0)) AS Q1,
AVG(NULLIF(Q2, 0)) AS Q2
FROM tableStudent;
上述查询为所有学生提供了整体结果。如果您想要学生的结果,您需要GROUP BY
:
SELECT
Name,
AVG(NULLIF(Q1, 0)) AS Q1,
AVG(NULLIF(Q2, 0)) AS Q2
FROM tableStudent
GROUP BY Name;
答案 1 :(得分:1)
您可以使用CASE
声明:
SELECT Name, SUM(CASE WHEN Q1 > 0 THEN Q1 ELSE 0 END) / COUNT(*) AS Q1,
SUM(CASE WHEN Q2 > 0 THEN Q2 ELSE 0 END) / COUNT(*) AS Q2
FROM table Student