2009-08-06 3 views
1
SELECT username, (SUM(rating)/count(*)) as TheAverage, count(*) as TheCount 
FROM ratings 
WHERE month ='Aug' AND TheCount > 1 
GROUP BY username 
ORDER BY TheAverage DESC, TheCount DESC 

Я знаю, что это действительно близко (я думаю), но он говорит, что «TheCount» не exsist в предложении WHERE и в предложении ORDER.MySQL query help

Стол:

идентификатор, имя пользователя, рейтинг, месяц

И я пытаюсь работать средний рейтинг для каждого пользователя, то упорядочить результаты по среднему рейтингу и количеству оценок.

Пожалуйста, помогите.

ответ

1

Если группа и посчитать, вам нужно, имеющие:

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
    FROM rating 
    WHERE month='Aug' 
    GROUP BY username 
    HAVING TheCount > 1 
    ORDER BY TheAverage DESC, TheCount DESC 
2
SELECT username, (SUM(rating)/count()) as TheAverage, count() as TheCount 
FROM ratings 
WHERE month ='Aug' 
GROUP BY username 
HAVING TheCount > 1 
ORDER BY TheAverage DESC, TheCount DESC 

EDIT:

Кажется, я не выглядел достаточно близко.

Я думаю, что теперь это сработает.

+1

Вы просто использовали 'TheAverage', который является псевдонимом, в предложении order by. –

+0

Спасибо, но это не работает. Возникает проблема с count() – Oliver

1

Вы можете использовать AVG агрегат:

SELECT username, month, AVG(rating) as TheAverage, COUNT(*) as TheCount 
FROM ratings 
WHERE month ='Aug' 
GROUP BY 
     username 
HAVING COUNT(*) > 1 
ORDER BY 
     TheAverage DESC, TheCount DESC 

Группировка по month является innesessary в MySQL, так как ваш month фильтруется и MySQL поддерживает выбор негруппированного столбца в списке SELECT запроса GROUP BY (возврат случайного значения в группу).