2012-08-08 109 views
0

我有表等SQL计数平均

id  userid semid courseid coursename total 
1  36  17  13  CA   23 
2  36  17  5  CB   46   
3  36  17  8  CC   20 
4  36  19  16  CD   34 
5  36  19  13  CA   31 
6  36  19  3  CA#  29 
7  36  19  7  CE   60 
8  36  10  9  CK   32 
9  36  10  15  CH   56  

我需要semid的平均输入用户名字,即,SUM(courseid)/数(的moduleId),它被示出9作为模块计数,但我只有3模块。 这是我的查询

SELECT userid, SUM(total)/count(semid) FROM custom WHERE userid=36 
+0

9从'count'返回行数,并且不计算该列的唯一值的数量(假设您正在对特定示例运行查询...否则我不确定在哪里9将来自 – MxyL 2012-08-08 08:03:38

+1

count(semid)给你9,因为有9行为36,如果你需要不同的semid,使用关键字“distinct” – Kamal 2012-08-08 08:05:51

回答

0
SELECT userid, SUM(total)/count(distinct semid) FROM custom WHERE userid=36 

尝试此查询

+0

谢谢你,它的工作 – ronquiq 2012-08-08 08:32:17

2

只需使用AVG()功能

SELECT userid, semid, AVG(total) 
FROM  custom 
WHERE userid = 36 
GROUP BY userid, semid 

SQLFiddle Demo

+0

他不是在寻找AVG的总数,而是AVERAGE为不同的semId。您的查询可能会导致他在问题中的错误回应。 – sundar 2012-08-08 08:38:43

+0

我很惊讶2+这个答案的投票? :) – sundar 2012-08-08 08:44:22

+0

这是因为OP不清楚他的问题。他没有提供确切的信息,他所做的只是提供他所用的查询。您是如何理解“Count Average”这个标题的? :) – 2012-08-08 08:48:57

0

有MYSQL聚合函数AVG()查找平均。 @John Totet Woo发布了答案。