2012-02-11 2 views
0

Это моя первая попытка JOIN заявление MySQL ...Как указать WHERE в инструкции JOIN?

У меня есть 2 таблицы .. games и games_ratings

обе таблицы имеют столбец ID. id представляет собой идентификатор игры. и я хочу получить среднее значение ints в столбце рейтинга, где id в games_ratings равен 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; 

Edit: Это немного трудно без вашей полной схеме, но вы можете попробовать что-то вроде этого.

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

, что сделал это! ты жжешь. благодаря! Это не позволяет мне пометить ваш ответ как правильный .... за 11 минут LOL так плохо отметить это в конце концов – brybam

+0

Удивительный! ':)' Добро пожаловать. – nickb

+0

1 вещь, которую я только что заметил ... вы бы знали, как вернуть это количество голосов. то пусть он закажет его в среднем ... но чем больше голосов, тем выше? Так что у меня нет игры с 1 5-звездным голосованием, который появляется выше, чем рейтинг 4.5 звезды с 800 голосами – brybam

1

Не забудьте ИНЕКЕ он просил:

где идентификатор в games_ratings равно идентификатору из таблицы игр

> 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' ничего не сделает, потому что оно вообще не изменит результаты. Только строки из обеих таблиц с одинаковыми идентификаторами будут возвращены из-за 'JOIN', добавив, что предложение WHERE является как добавление' WHERE 1 = 1', бессмысленным. – nickb

+0

На самом деле, теперь, когда я смотрю на него, так как это «LEFT JOIN», не может быть соответствия 'b.id' для' a.id', что означает, что ваше предложение WHERE будет удалять эти строки из набора результатов , Однако, если это был желаемый результат, тогда 'LEFT JOIN' должен стать' JOIN', устраняя необходимость в этом предложении WHERE. – nickb

+0

Если он/она задал вопрос ГДЕ по-разному (то есть: где id = 6), вам понадобилось бы его –

Смежные вопросы