T SQL для формулы среднего ватина - PullRequest
0 голосов
/ 08 июля 2020

У меня есть вопрос, который гласит:

Используя предложение BETWEEN, найдите всех игроков со средним показателем от 0,300 до 0,3249. Запрос должен вернуть полное имя (NameGiven (NameFirst) NameLast), YearID, Hits, At Bats и Batting Average, отсортированные по убыванию среднего значения.

SELECT 
    people.playerid, 
    (nameFirst +' ( '+ nameGiven + ' ) ' + nameLast) AS 'Full Name', 
    yearID, H, AB, 
    CONVERT(decimal(5, 4), h * 1.0 / AB) AS [Batting Average] 
FROM 
    People, Batting
WHERE 
    Batting Average BETWEEN .300 AND 0.3249
ORDER BY
    Batting Average DESC

Я получаю красное подчеркивание в * Пункт 1008 * для среднего уровня отбрасывания.

Почему он не распознает столбец «Среднее значение уровня отбрасывания» в списке выбора?

Что я делаю не так?

1 Ответ

3 голосов
/ 08 июля 2020

Причина ошибки в том, что вы не использовали квадратные скобки вокруг имени поля, как в предложении SELECT: [Batting Average].

Однако вы не можете ссылаться на псевдонимы из * Предложение 1005 * в предложении WHERE. Причина в том, что предложение WHERE оценивается до оценки выражений в предложении SELECT. С другой стороны, вы можете ссылаться на такой псевдоним в предложении ORDER BY. Но не забудьте эти скобки.

В предложении WHERE вам снова придется использовать формулу в исходных полях.

Также следует избегать деления на ноль. Так что лучше убедитесь, что AB не равно нулю.

Наконец, вы не указали соединение для двух таблиц, поэтому ваш запрос даст декартово произведение. Я предполагаю, что в таблице Batting есть внешний ключ с именем playerid.

Итак, принимая во внимание все эти моменты, это должен быть лучший запрос:

SELECT     people.playerid, 
           (nameFirst +' ( '+ nameGiven + ' ) ' + nameLast) AS 'Full Name', 
           yearID, 
           H,
           AB, 
           Convert(decimal(5,4), h*1.0/AB) as [Batting Average] 
FROM       People
INNER JOIN Batting ON Batting.playerid = People.playerid
WHERE      AB <> 0
       AND h*1.0/AB BETWEEN .300 AND 0.3249
ORDER BY   [Batting Average] DESC
...