【问题标题】:Get the average for a set of records获取一组记录的平均值
【发布时间】:2013-12-16 09:16:14
【问题描述】:

我有一张露营地的评论表,其中包含类别(价格、景观、设施、位置)。 以下查询用于按四个类别的平均值显示前 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 的平均价格、景观、设施、位置/评论数量?

【问题讨论】:

    标签: mysql average


    【解决方案1】:

    平均函数当然是累加的,但你可以自己实现,SUMing 评论分数和COUNTing 他们的数字:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2013-04-26
      相关资源
      最近更新 更多