SQL вычислить среднее из двух полей - PullRequest
2 голосов
/ 27 июля 2011

У меня есть таблица базы данных, в которой есть три соответствующих поля: сначала идентификатор пользователя, затем одно - количество отправленных узлов, другое - сумма «очков» для каждого узла.

Мне нужночтобы иметь возможность выполнить запрос, который вернет пользователям с наивысшим средним баллом, но мой SQL-фу не там, где он мог бы быть.

Ура!

Ответы [ 5 ]

2 голосов
/ 27 июля 2011

Вот что вам нужно. Важно привести ваши типы данных int к чему-то, что обрабатывает десятичные дроби, иначе вы получите неточные средние значения:

SELECT *, CAST(total_score AS FLOAT) / CAST(total_nodes AS FLOAT) AS average_score
FROM yourtable
ORDER BY CAST(total_score AS FLOAT) / CAST(total_nodes AS FLOAT) DESC

Удачи!

-Michael

1 голос
/ 27 июля 2011

Вы ищете

-- Multiplied by 1.0 to convert it to double
Select top 100 user_id, (1.0 * total_score/total_node) as AvgScore
From   YourTable
Order By (total_score/total_node) asc
0 голосов
/ 27 июля 2011

Попробуйте это:

select userid,max(avgscore) as maxscore
from 
(select userid,avg(score) as avgscore from usertable group by userid) mytab
0 голосов
/ 27 июля 2011

Easer будет

SELECT AVG(user.score1 + user.score2)/2 as average, userid FROM usertable
GROUP BY userid
ORDER BY average

Следите за вашими типами данных. Если значения являются целыми числами, вы можете сначала привести среднее значение к десятичным числам.

0 голосов
/ 27 июля 2011
SELECT AVG(user.score) AS avg_score 
FROM user 
GROUP BY user.id 
ORDER BY avg_score DESC 
...