2013-12-16 134 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