【问题标题】:SQL query returning invalid resultsSQL 查询返回无效结果
【发布时间】:2017-05-05 20:43:41
【问题描述】:

有点 SQL 的新手,所以我很感激任何关于我在哪里出错的 SQL 语句的提示。

我有两张表,一张名为Hotel,另一张名为Review。它们通过HotelID 链接。我正在尝试返回与大于或等于 3 的OverallRatingHotel 表中的属性)和大于或等于平均 CleanlinessReview 属性)相关联的HotelIDs等于 5。

我知道有 没有 HotelID 满足这两个要求,但这个语句返回了很多结果。

SELECT
    Hotel.HotelID
FROM
    Hotel 
    INNER JOIN Review ON Hotel.HotelID = Review.ReviewID 
GROUP BY
    Hotel.HotelID 
HAVING
    ( Hotel.OverallRating >= 3 )
    AND
    ( AVG( NULLIF( Review.Cleanliness, -1 ) ) >= 5);

NULLIF 用于排除 -1 的值(表示没有评分)。

谢谢大家

【问题讨论】:

    标签: sql sqlite join average


    【解决方案1】:

    我认为问题在于您的INNER JOIN 声明。当您将两个表连接在一起时,您希望将它们连接到它们之间相关的数据上。您目前正在加入Hotel.HotelID = Review.ReviewID。我的猜测是这些都是各自表的主键,并且 ReviewID 不指向 Hotel 中的记录。

    尝试将您的加入更改为ON Hotel.HotelID = Review.HotelID

    【讨论】:

      【解决方案2】:

      您的内部连接错误。

      INNER JOIN Review ON Hotel.HotelID = Review.ReviewID
      

      应该是

      INNER JOIN Review ON Hotel.HotelID = Review.HotelID
      

      在联接中使用 HotelId 而不是 ReviewId

      【讨论】:

      • 我是个白痴,天哪。我昨晚修好了,一定没有保存它。谢谢!
      【解决方案3】:

      嗯。 . .在加入酒店之前总结评论。然后,您还应该加入正确的密钥:

      SELECT h.HotelID
      FROM Hotel h JOIN
           (SELECT r.HotelId, AVG(r.Cleanliness) as avg_cleanliness
            FROM Review r
            GROUP BY r.HotelId
           ) r
           ON h.HotelId = r.HotelId
      WHERE h.OverallRating >= 3 AND r.avg_cleanliness >= 5;
      

      【讨论】:

        【解决方案4】:

        评论中是否存在拼写错误或酒店 ID。ReviewID

        INNER JOIN Review ON Hotel.HotelID = Review.HotelID
        

        【讨论】:

          【解决方案5】:

          我也是 sql 新手,但是您尝试过使用 WHERE 语句吗?

          选择Hotel.HotelID 从酒店 INNER JOIN Review ON Hotel.HotelID = Review.HotelID WHERE (Hotel.OverallRating >= 3) AND (AVG(NULLIF(Review.Cleanliness, -1)) >= 5);

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-08
          • 2011-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多