首页 > 解决方案 > 如何根据另一个表中的平均值对一个SQL表进行排序

问题描述

表关系和字段的图像

我在进行查询时遇到了很大的困难,我想根据另一个表中的平均值对查询进行排序。我有一个带有 HotelID、HotelName、PricePerNight、LeftCoordinate 和 TopCoordinate 的 tblHotels 表,以及一个带有 HotelID 和 HotelRating 的 tblRatings 表(从各种用户/多个评级中排名从 1 到 10)。

我希望我的查询显示 PricePerNight(来自 tblHotels)在给定范围内(在 lowervalue 和 uppervalue 之间)的所有酒店,然后按它们在 tblRatings 中的评级对其进行排序。

SELECT tblRatings.HotelID
    , tblHotels.HotelName
    , LeftCoordinate
    , TopCoordinate
    , AVG(HotelRating) AS Rating 
FROM tblRatings, tblHotels 
WHERE ( SELECT HotelID 
        FROM tblHotels 
        WHERE PricePerNight BETWEEN LowerValue AND UpperValue) = 
        tblRatings.HotelID 
GROUP BY tblRatings.HotelID 
ORDER BY AVG(HotelRating) DESC

SELECT tblRatings.HotelID
    , HotelName
    , LeftCoordinate
    , TopCoordinate
    , AVG(HotelRating) AS Rating 
FROM tblHotels, tblRatings 
WHERE (PricePerNight BETWEEN LowerValue AND UpperValue) AND (tblHotels.HotelID = tblRatings.HotelID) 
GROUP BY tblRatings.HotelID 
ORDER BY AVG(HotelRating) DESC

我尝试了一个子查询和一个相关的表查询,但都给了我错误“HotelName 不是聚合函数的一部分”

我在网上找了一个解决方案,但没有成功:(

标签: sqlms-access

解决方案


基本上你需要按更多的东西分组......

SELECT tblRatings.HotelID
    , HotelName
    , LeftCoordinate
    , TopCoordinate
    , AVG(HotelRating) AS Rating 
FROM tblHotels, tblRatings 
WHERE (PricePerNight BETWEEN LowerValue AND UpperValue) AND (tblHotels.HotelID = tblRatings.HotelID) 
GROUP BY tblRatings.HotelID, HotelName, LeftCoordinate, TopCoordinate
ORDER BY AVG(HotelRating) DESC

推荐阅读