【问题标题】:Select ID's where average rating between选择平均评分之间的 ID
【发布时间】:2016-04-22 12:21:57
【问题描述】:

我有 2 张桌子:

表“biz”和表“biz_rating”

商业

  • biz_id (int)
  • 名称(varchar)

biz_rating

  • biz_rating_id (int)
  • biz_id (int)
  • 评级(整数)

我想要一个查询来选择平均评分介于 1-2、3-4 或 5 之间的所有 biz 行(评分是从 0 到 5 的数字)。

我真的不知道如何开始。

我现在有这样的东西:

SELECT
    biz_id
FROM
    biz
WHERE
    biz_id IN
    (SELECT biz_id FROM biz_rating WHERE AVG(rating) BETWEEN 0 AND 5)
ORDER BY
    biz_id ASC

但这根本不起作用。

【问题讨论】:

  • 添加 GROUP BY 并在子选择中从 WHERE 切换到 HAVING。

标签: mysql sql average


【解决方案1】:

如果你想要名字和id,你可以加入表格

 select biz_id,name,b2.avgrating
 from BIZ as B1,
( select biz_id as bid, avg(rating) as avgrating
 from biz_rating
 group by biz_id 
 having avg(rating) between 0 and 5) as B2

 where B1.biz_id=B2.bid

如果你愿意,这也会选择平均评分

【讨论】:

    【解决方案2】:

    只需使用聚合。你甚至不需要join

    select br.biz_id
    from biz_rating br
    group by br.biz_id
    having avg(rating) between 1 and 2;  -- or whatever limits you want
    

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多