【问题标题】:Sort by average rating between 2 values按 2 个值之间的平均评分排序
【发布时间】:2015-08-21 02:29:32
【问题描述】:

我有一个名为ranks 的表,它存储一个 1-7 的值并将它与一个项目和用户 ID 连接起来。一个项目的评分是它所获得的所有评分的平均值。

排名表:id | userid | value | itemid.

按平均最高评分排序,我这样做(来自此处的答案):

select avg(value), itemid
from ranks
group by itemid
order by avg(value) desc

但是,我还希望能够过滤具有特定评级的项目,而不仅仅是最高评级 -> 最低评级。例如,平均评分介于 5 和 6 之间的项目。

select avg(value), itemid
from ranks
having avg(value) between 5 and 6
group by itemid
order by avg(value) desc

这给了我group by 的非特定错误。谁能指出我正确的方向?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您的having 子句需要在您的group by 子句之后,因此只需颠倒它们出现的顺序即可:

    select avg(value), itemid
    from ranks
    group by itemid
    having avg(value) between 5 and 6
    order by avg(value) desc
    

    【讨论】:

      【解决方案2】:
      select * from
      (
      select avg(value) as avgval, itemid
      from ranks
      group by itemid) t
      where avgval between 5 and 6;
      

      您可以使用子查询来做到这一点。

      【讨论】:

        【解决方案3】:
        with Temp as 
        (
        select avg(value) [rating], itemid
        from ranks
        )
        Select * from Temp
        Where rating between 5 and 6
        group by itemid
        order by rating desc
        

        【讨论】:

          猜你喜欢
          • 2011-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 2015-04-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多