2012-02-11 46 views
0

這是我在JOIN MySQL的聲明中第一次嘗試......如何在JOIN語句中指定WHERE?

我有2個表... gamesgames_ratings

兩個表有一個ID列。 id代表遊戲的ID。我只想得到評級欄中平均值,其中games_ratings中的id等於遊戲桌上的id。

SELECT a.id, a.name, AVG(b.rating) AS average FROM games a LEFT JOIN games_ratings b GROUP BY a.id ORDER BY average DESC LIMIT 50;

有什麼想法嗎?

回答

2

試試這個:

SELECT a.id, a.name, AVG(b.rating) AS average 
    FROM games a 
    LEFT JOIN games_ratings b 
    ON a.id = b.id # <-- You need this line I believe 
GROUP BY a.id 
ORDER BY average DESC LIMIT 50; 

編輯:這是一個有點硬沒有你的完整的模式,但你可以嘗試這樣的事情。

SELECT a.id, a.name, AVG(b.rating) AS average, COUNT(b.id) as votes 
    FROM games a 
    LEFT JOIN games_ratings b 
    ON a.id = b.id 
GROUP BY a.id 
ORDER BY votes DESC, average DESC LIMIT 50; # <-- You may need to modify this line 
+0

認爲這樣做是等於ID!你搖滾。謝謝!它不讓我標記你的答案是正確的...... 11分鐘大聲笑,所以生病最後標記它 – brybam 2012-02-11 05:20:28

+0

太棒了! ':''不客氣。 – nickb 2012-02-11 05:21:03

+0

1件事我剛剛注意到了....你會知道如何讓它返回它有多少票。然後讓它按平均值排序......但是越多的選票越高呢?所以我沒有1個5星級投票出現比4.5星評級高出800票的遊戲 – brybam 2012-02-11 05:36:58

1

不要忘記在WHERE子句他問:

其中games_ratings的ID從遊戲表

> SELECT a.id, a.name, AVG(b.rating) AS average 
>  FROM games a 
>  LEFT JOIN games_ratings b 
>  ON a.id = b.id # <-- You need this line I believe 
>  **WHERE a.id = b.id** 
>  GROUP BY a.id 
>  ORDER BY average DESC LIMIT 50; 
+0

這沒有任何意義,WHERE條款不會做任何事情,因爲它根本不會改變結果。只有具有相同ID的兩個表中的行纔會被返回,因爲有'JOIN',並且添加了'WHERE'子句就像添加'WHERE 1 = 1'一樣,毫無意義。 – nickb 2012-02-11 05:26:38

+0

實際上,現在我看它,因爲它是'LEFT JOIN',所以'a.id'可能沒有匹配的'b.id',這意味着'WHERE'子句將從結果集中移除這些行。然而,如果這是所期望的結果,那麼'LEFT JOIN'應該成爲'JOIN',不需要這個'WHERE'子句。 – nickb 2012-02-11 05:35:55

+0

如果他/她以不同的方式質疑WHERE(即:id = 6),您將需要它 – 2012-02-11 05:36:50