2012-01-12 102 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

相關問題