2013-12-16 5 views
1

У меня есть таблица обзоров для кемпингов, которые имеют категории (Цена, Вид, удобства, местоположение). Следующий запрос используется для отображения 20 лучших обзоров по средним значениям по четырем категориям.Получить среднее значение для набора записей

SELECT 
    ROUND(((R.price + R.location + R.facilities + R.view)/4), 2) AS avg, 
    R.poi_id, 
    poi.Name 
FROM 
    `Reviews` AS `R` 
    LEFT JOIN `poi` ON `R`.`poi_id` = `poi`.`ID` 
ORDER BY avg DESC 
LIMIT 20 

Однако я понял, что запрос не вместить сценариев, где Есть более чем один обзор для того же лагеря.

Так есть запрос, который вернет самый высокий 20-ти местный кемпинг (poi) со средней ценой, просмотром, возможностями, расположением/количеством обзоров для этой poiID?

ответ

0

Средняя функция, конечно, к кумулятивным, но вы можете реализовать его самостоятельно SUM ИНГ баллы обзорные и COUNT ИНГ их номера:

SELECT 
    ROUND(((R.price + R.location + R.facilities + R.view)/4 * cnt), 2) AS avg, 
    R.poi_id, 
    poi.Name 
FROM 
    (SELECT SUM(price) AS price, 
      SUM(location) AS location, 
      SUM(facilities) AS facilities, 
      SUM(view) AS view, 
      COUNT(*) AS cnt, 
      poi_id 
    FROM Review 
    GROUP BY poi_id) AS `R` 
    LEFT JOIN `poi` ON `R`.`poi_id` = `poi`.`ID` 
ORDER BY avg DESC 
LIMIT 20 
Смежные вопросы