Использовать результат AVG в подзапросе select - PullRequest
1 голос
/ 10 ноября 2019

У меня есть система рейтинга в моем приложении. Сейчас я пытаюсь получить все результаты AVG из рейтингов. Каждый результат AVG имеет результат (в тексте), который мне нужно получить из таблицы rating_results.

Это выглядит так:

select round(avg(rating_results.rating)) as ratingresult, count(*) as votes, score.question_nl,
(select result_nl from rating_results where rating_results.rating = ratingresult and rating_results.score_id = score.id) from score 
inner join score_categories on score_categories.id = score.category_id
inner join rating ON score.id = rating.score_id
inner join rating_results on rating.rating_result_id = rating_results.id
inner join dog on dog.id = rating.ratable_id 
where dog.breed_id = 201
group by score.question_nl

Проблема в том, что я не могуиспользуйте ratingresult в subselect.

Запрос 1 ОШИБКА: ссылка 'ratingresult' не поддерживается (ссылка на групповую функцию)

Я уже много пробовал, но не могу найти другой способ.

Здесь можно помочь, спасибо!

- РЕДАКТИРОВАТЬ

Результат оценки объясняет оценку. Поэтому, если рейтинг AVG равен 4, в таблице rating_results я могу найти значение этого рейтинга:

enter image description here

1 Ответ

1 голос
/ 10 ноября 2019

Вместо выбора значения столбца вы можете использовать подзапрос для avg в соединении

  select t.ratingresult
  , count(*) as votes
  , score.question_nl
  , rating_results.result_nl 
FROM score
inner join score_categories on score_categories.id = score.category_id
inner join rating ON score.id = rating.score_id
inner join rating_results on rating.rating_result_id = rating_results.id
inner join dog on dog.id = rating.ratable_id 
INNER JOIN  (
  select round(avg(rating_results.rating)) as ratingresult
    , score.question_nl
  from score 
  inner join rating ON score.id = rating.score_id
  inner join rating_results on rating.rating_result_id = rating_results.id
  group by score.question_nl
) t ON t.ratingresult = rating_results.rating   
        AND rating_results.score_id = score.id
          AND score.question_nl = t.question_nl
where dog.breed_id = 201
group by score.question_nl, t.ratingresult

, избегая подзапроса

...