2015-09-08 136 views
0

在我的查詢中,rating_food,rating_servicerating_decor對於我的所有結果都返回相同的值。SQL查詢選擇相同的數據

select `restaurants`.*, `rating`.*, (rating.rating_food + rating.rating_service + rating.rating_decor)/3 as rating_total from 
(
SELECT 
avg(reviews.rating_food) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_food, 
avg(reviews.rating_service) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_service, 
avg(reviews.rating_decor) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_decor 
FROM restaurants 
JOIN reviews ON reviews.restaurant_id = restaurants.id 
) 
as rating, restaurants 
order by `rating_total` asc limit 12 

預期結果:
12個結果的陣列與另外三個計算列(rating_food等)

現在,我得到12倍的結果,但他們所有的rating_foodrating_servicerating_decor返回相同的值的所有結果。

+1

BY子句中的派生表添加組?主查詢JOIN條件 – jarlh

+0

編輯您的問題並提供樣本數據和期望的結果。這可能會讓你感到驚訝,但是一個無法正常運行的查詢並不一定能很好地表達你想要做的事情。 –

+0

@GordonLinoff已添加解釋。 – andershagbard

回答

2

您需要將ratings子查詢與restaurants表連接起來。

試試這個:

select `restaurants`.*, `rating`.*, 
(rating.rating_food + rating.rating_service + rating.rating_decor)/3 as rating_total from 
(
SELECT 
restaurants.id, 
avg(reviews.rating_food) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_food, 
avg(reviews.rating_service) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_service, 
avg(reviews.rating_decor) * (- 1/(0.33 * count(reviews.id) + 1) + 1) + 5 * 1/(count(reviews.id) + 1) as rating_decor 
FROM restaurants 
JOIN reviews ON reviews.restaurant_id = restaurants.id 
GROUP by restaurants.id 
) 
as rating join restaurants on rating.id = restaurants.id 
order by `rating_total` asc limit 12 

SQL小提琴:http://sqlfiddle.com/#!9/50b39/4/0

+0

返回1結果。預計12 – andershagbard

+0

固定,一羣失蹤。鏈接新的SQL小提琴以及。 – eugenioy

+0

修好了!我添加了LEFT JOIN評論以獲取所有結果,即使它們與任何評論沒有關係。 – andershagbard