2014-01-23 2 views
0

У меня есть две таблицы. У одного есть идентификатор и оценка. У другого есть столбцы: id, name. Идентификатор во второй таблице соответствует одному в первой таблице. Имя может иметь несколько идентификаторов. Я хочу найти n (разных) имен, у которых есть самые высокие средние баллы.Sqlite3: найти средний балл 10 разных людей

Я могу найти 10 различных имен, я могу найти средний балл. Тем не менее, я не вижу, как объединить 2.

select id, id2, avg (оценка) как avg_score от t1, t2 где t1.id = t2.id2 группа по порядку имен по movie.score desc limit 10;

Но я уверен, что это неправильно.

ответ

0
SELECT foo.name AS name, AVG(bar.score) AS avgscore 
FROM foo 
    JOIN bar ON foo.id=bar.id 
GROUP BY name 
ORDER BY avgscore DESC 
LIMIT 10 

Главное, что вам не хватало был AVG агрегатная функция на самом деле средний ничего. Кроме того, вы хотите группировать по имени (это гарантирует, что вы получите только одну строку за каждое имя и делает AVG средним количеством баллов для каждого имени), и здесь нет смысла использовать HAVING.

+0

Так что я думаю, что у меня это работает. Вывод имен в алфавитном порядке, как я хочу. Это просто удача? Или есть ли что-то, что я могу сделать, чтобы гарантировать, что я получу самые высокие оценки авг и если есть какие-то связи, то он помещает их в алфавитном порядке? – lars

+0

@lars вы можете 'ORDER BY score DESC, имя ASC', чтобы сделать поведение тай-брейка явным. – hobbs

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