返回无效结果的SQL查询

返回无效结果的SQL查询,sql,sqlite,join,average,Sql,Sqlite,Join,Average,对SQL有点陌生,所以我希望您能给我一些提示,告诉我这个SQL语句哪里出了问题 我有两张桌子,一张叫Hotel,一张叫Review。它们通过HotelID链接。我试图返回HotelID与总体评分大于或等于3(酒店表中的属性)和平均清洁度(查看属性)大于或等于5相关联的HotelIDs 我知道有一个事实,没有满足这两个要求的HotelID,但是这个语句返回了很多结果 SELECT Hotel.HotelID FROM Hotel INNER JOIN Review ON

对SQL有点陌生,所以我希望您能给我一些提示,告诉我这个SQL语句哪里出了问题

我有两张桌子,一张叫
Hotel
,一张叫
Review
。它们通过
HotelID
链接。我试图返回
HotelID
总体评分
大于或等于3(酒店
表中的属性)和平均
清洁度
(查看
属性)大于或等于5相关联的
HotelID
s

我知道有一个事实,没有满足这两个要求的
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的值(表示没有剩余评级)


谢谢大家

嗯。加入酒店之前,总结一下评论。然后,您还应按正确的键加入:

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;

嗯。加入酒店之前,总结一下评论。然后,您还应按正确的键加入:

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;

我认为问题在于你的
内部连接
语句。将两个表连接在一起时,您希望在它们之间相关的数据上连接它们。您当前正在加入Hotel.HotelID=Review.ReviewID
。我猜这些都是各自表的主键,ReviewID并没有指出酒店的记录


尝试将您的加入更改为Hotel.HotelID=Review.HotelID
我认为问题在于您的
内部加入声明。将两个表连接在一起时,您希望在它们之间相关的数据上连接它们。您当前正在加入Hotel.HotelID=Review.ReviewID
。我猜这些都是各自表的主键,ReviewID并没有指出酒店的记录


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

您的内部加入错误

INNER JOIN Review ON Hotel.HotelID = Review.ReviewID
应该是

INNER JOIN Review ON Hotel.HotelID = Review.HotelID

在连接中使用HotelId not ReviewId

您的内部连接错误

INNER JOIN Review ON Hotel.HotelID = Review.ReviewID
应该是

INNER JOIN Review ON Hotel.HotelID = Review.HotelID

在join中使用HotelId not ReviewId

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

选择HotelID酒店 从酒店 Hotel.HotelID=Review.HotelID上的内部加入评论
式中(酒店总体污染等级>=3)和(平均无污染等级-1))>=5

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

选择HotelID酒店 从酒店 Hotel.HotelID=Review.HotelID上的内部加入评论
式中(酒店总体污染等级>=3)和(平均无污染等级-1))>=5

评论中是否存在打字错误或酒店ID。评论ID

INNER JOIN Review ON Hotel.HotelID = Review.HotelID

评论中是否有打字错误或酒店ID。评论ID

INNER JOIN Review ON Hotel.HotelID = Review.HotelID

我是个白痴,天哪。我昨晚修好了,一定没有保存它。谢谢我是个白痴,天哪。我昨晚修好了,一定没有保存它。谢谢你好欢迎来到StackOverflow!你的问题很广泛。请读一读。谢谢你好欢迎来到StackOverflow!你的问题很广泛。请读一读。谢谢