我在數據庫中有四個表: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