【问题标题】:trouble finding query to display names having ratings greater than a given value查找查询以显示评级大于给定值的名称时遇到问题
【发布时间】:2016-11-03 08:19:38
【问题描述】:

桌式公寓>

apartment_id || apartment_name || status
==============================
 1                         joys                active
 5                         harrys              active  
 10                        tols                active 

表格评分>

user_id || apartment_id || rating
===================================
  1              1                  4
  2              5                  3
  3              10                 4
  4              10                 5  

我需要获取评分大于某个值的公寓名称(比如“x”)..如果同一公寓有超过 1 个来自不同用户的评分(例如在 apartment_id = 10 中),则应返回公寓,如果平均值大于'x'..

SELECT a.*  FROM  `apartment` AS a     LEFT JOIN `ratings` AS b ON a.`apartment_id` = b.`apartment_id` WHERE  a.`status` NOT IN ('inactive')  AND (b.apartment_id IN (SELECT apartment_id FROM `ratings` WHERE `rating` > x)) GROUP BY a.`apartment_id` 

如果公寓只有一个评级,上述查询可以正常工作。如果公寓有多个评级值,请提供帮助

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT a.apartment_name,
           t.avg_rating
    FROM apartment a
    LEFT JOIN(SELECT s.apartment_id , AVG(s.rating) as avg_rating
         FROM ratings s
         GROUP BY s.apartment_id
         HAVING AVG(s.rating) > <X..> ) t
     ON(t.apartment_id = a.apartment_id)
    WHERE a.status NOT IN ('inactive') 
    

    【讨论】:

    • 查询似乎有问题... apartment 表中所有带有“status=active”的公寓都在显示,与评级无关...apartments apartments 表中但未出现在 ratings 表中的也正在显示
    • @ashwin 这些是你的过滤器,不是我的。如果您只想要两个表中出现的结果,请使用 INNER JOIN 而不是 LEFT JOIN 。如果你只想不活跃使用`NOT IN('active')`而不是NOT IN('inactive')
    • 将 LEFT JOIN 更改为 INNER JOIN..工作成功..thanku @sagi
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2014-07-09
    相关资源
    最近更新 更多