我在数据库中有四个表:City,User,CityRating,CityGreeting。 CityRating表的UserID和CityID作为PK,这些都是FK的USer和City表。 CityGreeting表没有PK,但具有用户ID和城市ID作为FK(想法是用户可以根据需要多次迎接城市,但只对一个城市评分一次)。多个连接,在一张桌子上的平均数,在另一个数上
我想写一个查询,将整体回报的平均等级的城市,以及时代的特定用户欢迎的城市:
select City.CityID, City.CityName, City.CityStateOrProvince,
ROUND(AVG(Cast(RateCity.Rating as float)), 2) as AverageRating,
(select COUNT(HelloCity.CityID) from HelloCity where HelloCity.UserID like '<guid>') as TimesVisited
from City
right join RateCity
on City.CityID = RateCity.CityID
right join HelloCity
on City.CityID = HelloCity.CityID
group by City.CityID, City.CityName,
City.CityStateOrProvince, City.CityCountry, City.CityImageUri
即使我能得到这个作为工作预计(目前不是)我觉得它真的很混乱。就最佳实践而言,写两个查询会更好吗?这个操作将在api中执行,不确定在编写两个单独的查询时性能会更好,还是像这样复杂的查询。对此的任何见解或如何让查询按预期工作?
***编辑:添加图片澄清:平均评分是所有评分的用户的平均值,TimesVisited是一个特定用户访问该城市的次数。
什么你是否像使用UserId一样使用?你不应该在说UserID =和City.CityId = HelloCity.CityId吗? – MacWise
您可以添加样本数据和预期结果 –
我添加了一张图片来说明结果 - 图片中唯一不正确的是TimesVisited列 - 它应该显示特定用户访问过每个城市的次数 – KateMak