如何在sql server中计算avg

时间:2015-08-13 14:45:33

标签: sql sql-server

我正在尝试在经典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?

2 个答案:

答案 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