AVG для одного столбца по значениям в другом столбце SQL-запрос - PullRequest
1 голос
/ 12 января 2012

Я хочу найти AVG для одного столбца по значениям в другом столбце одного SQL-запроса.

table - question_rating
review_id
question_id
rating
  • для каждого отзыва есть 16 вопросов и оценок.
  • значения question_id от 1 до 16.
  • номинальные значения от 1 до 5.

Я хочу найти среднюю группу вопросов как

Желаемый вывод-

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 и т. Д.

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Вы должны составить таблицу 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
2 голосов
/ 12 января 2012
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
...