2012-01-12 92 views
1

我想通过不同列的单个sql查询中的值在同一列上查找AVG。AVG在同一列由另一列中的值单个sql查询

table - question_rating 
review_id 
question_id 
rating 
  • 每个审查有多个16个问题和评级。
  • question_id值是1到16
  • 评价值是从1到5

我想找到的AVG问题组作为

期望输出 -

qustion_id  rating 
------------------------- 
g1    4.4 
g2    3.7 
g3    5.6 

g1是一组问题(1,3) g2是一组问题(2,6) g3是一组问题(7,8) .... g8

伪代码 -

select (if(qustion=1 and question=3) as g1, 
if(qustion=2 and question=6) as g2), .. 
)avg(rating of respective group) from question_rating 

我知道它可以通过单独服用查询做,但我想通过一个查询就知道了。

或任何简单的方法来找到这样的输出由PHP等。

+0

我不明白“我想在不同的值,以找到AVG在同一列列单个sql查询“。手段。 – 2012-01-12 13:06:40

回答

3

你应该做一个表question_groups

question_id group_id 
q1   g1 
q2   g2 
q3   g1 
q4   g3 
q5   g3 
q6   g2 

和选择将

select group_id, avg(rating) 
from question_rating a 
    join question_groups b on (a.question_id= b.question_id) 
group by group_id 
+0

问题不能分组。 – 2012-01-12 13:28:25

+0

@SomnathMuluk - 您明确指出,例如,“组1”由问题(1,3)组成。这个答案建议将该关联放入另一个表中,加入并使用GROUP BY。除非你没有解释你的数据,否则这个确实有用。 – MatBailie 2012-01-12 13:31:38

+0

我不明白,你有什么错误? – 2012-01-12 13:32:23

2
SELECT 
    CASE question_id 
    WHEN 1 THEN 'g1' 
    WHEN 3 THEN 'g1' 
    WHEN 2 THEN 'g2' 
    WHEN 4 THEN 'g2' 
    ELSE 'others' END AS qGroup, 
    AVG(rating) AS AvgRating 
FROM question_rating 
GROUP BY 
    CASE question_id 
    WHEN 1 THEN 'g1' 
    WHEN 3 THEN 'g1' 
    WHEN 2 THEN 'g2' 
    WHEN 4 THEN 'g2' 
    ELSE 'others' END 
+0

它给出的错误为“您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'question_id IN(1,2)THEN'g1'' – 2012-01-12 13:40:46

+0

尝试更正示例 – 2012-01-12 13:50:42

+0

它仍然给出相同的错误。 – 2012-01-12 14:15:00

相关问题