SQL Developer - оператор SELECT с вычислением AVG, отображающий несколько средних значений? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь написать оператор SELECT, который усредняет необработанный счет игрока, вычитает необработанный счет из 200 и затем умножает его на 90% для расчета гандикапа игрока.

Этот кодкажется, что применяет вычисления правильно, но создает много разных средних значений для каждого игрока.

SELECT BOWLERID "Bowler ID", b.BOWLERFIRSTNAME || ' ' || 
   b.BOWLERLASTNAME "Bowler Name",
   AVG(bs.HANDICAPSCORE)+ -200 * 0.90 "Handicap"
FROM BOWLER_SCORES bs
   JOIN BOWLERS b USING (BOWLERID)
GROUP BY BOWLERID, b.BOWLERFIRSTNAME, b.BOWLERLASTNAME, 
   bs.HANDICAPSCORE
ORDER BY bs.HANDICAPSCORE DESC;

Я думаю, что это проблема с настройкой соединения моего стола, но я не могу точно определить это.

Я очень новичок в SQL, поэтому любые советы и указатели очень ценятся.

РЕДАКТИРОВАТЬ:

Поэтому при удалении bs.HANDICAPSCORE и изменении ORDER BY на "Handicap", ятеперь видим, что средние расчеты неверны.Кроме того, мне нужно округлить до десятичных точек.

ОБНОВЛЕННЫЙ КОД:

SELECT BOWLERID "Bowler ID", b.BOWLERFIRSTNAME || ' ' || 
   b.BOWLERLASTNAME "Bowler Name",
   AVG(bs.HANDICAPSCORE)+ -200 * 0.90 "Handicap"
FROM BOWLER_SCORES bs
   JOIN BOWLERS b USING (BOWLERID)
GROUP BY BOWLERID, b.BOWLERFIRSTNAME, b.BOWLERLASTNAME
ORDER BY "Handicap" DESC;

Правильно ли настроен оператор AVG?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Похоже, ваш расчет должен быть (200 - средний) * 90%, поэтому

SELECT BOWLERID "Bowler ID", b.BOWLERFIRSTNAME || ' ' || b.BOWLERLASTNAME "Bowler Name", (200 - AVG(bs.HANDICAPSCORE)) * 0.90 "Handicap"
FROM BOWLER_SCORES bs
JOIN BOWLERS b USING (BOWLERID)
GROUP BY BOWLERID, b.BOWLERFIRSTNAME, b.BOWLERLASTNAME
ORDER BY "Handicap" DESC;
0 голосов
/ 11 декабря 2018

У вас есть функция AVG(), но вы также включаете поле в GROUP BY.Кроме того, я думаю, что ваш расчет отключен из-за приоритета оператора:

SELECT BOWLERID as "Bowler ID", b.BOWLERFIRSTNAME || ' ' || b.BOWLERLASTNAME as "Bowler Name",
       (200 - AVG(bs.HANDICAPSCORE)) * 0.90 as Handicap
FROM BOWLER_SCORES bs JOIN
     BOWLERS b 
     USING (BOWLERID)
GROUP BY BOWLERID, b.BOWLERFIRSTNAME, b.BOWLERLASTNAME
ORDER BY AVG(bs.HANDICAPSCORE) DESC;
...