У меня есть список результатов турниров из данных тура PGA, и я хотел бы удалить букву «T» в начале строк столбца финиша, где это применимо, чтобы я мог получить среднее число. Длины строк являются переменными, а также содержат «CUT» в некоторых строках. Есть ли способ убрать букву «Т»?
Я использовал...
WHERE Finish not like "CUT"
удалить значения "CUT"
и безуспешно использовали различные функции для удаления буквы «Т». Любая помощь будет принята с благодарностью! Спасибо
Отображение строк переменной длины в столбце «Готово»
Обновлено:
Это то, что у меня есть до сих пор, которое отлично работает для агрегирования средних значений и группировки по игрокам в одной строке по желанию.
SELECT
DISTINCT(player),
ROUND(AVG(CAST(sg_putt as numeric)),2) as avg_sg_putt,
ROUND(AVG(CAST(sg_arg as numeric)),2) as avg_sg_arg,
ROUND(AVG(CAST(sg_app as numeric)),2) as avg_sg_app,
ROUND(AVG(CAST(sg_ott as numeric)),2) as avg_sg_ott,
ROUND(AVG(CAST(sg_t2g as numeric)),2) as avg_sg_t2g,
ROUND(AVG(CAST(sg_total as numeric)),2) as avg_sg_total,
SUM(made_cut) as cuts_made,
COUNT(DISTINCT(tournament_id)) as total_played,
FROM
`pga_stats_2015_2022.stats`
WHERE
season >= 2017 AND
sg_putt not like "NA" AND
sg_arg not like "NA" AND
sg_app not like "NA" AND
sg_ott not like "NA" AND
sg_t2g not like "NA" AND
sg_total not like "NA"
GROUP BY player
HAVING total_played > 50
ORDER BY(avg_sg_total) DESC
Может быть, мне нужно обновить значения столбца?? Я попытался ЗАМЕНИТЬ, но продолжаю получать сообщение об ошибке «ни группировщик, ни агрегированный» в отношении столбца завершения. Возможно, потому что я уже группирую по игрокам?
Из документации здесь, кажется, вы хотите REPLACE
:
REPLACE(original_value, from_value, to_value)
Так, например,
SELECT REPLACE(Finish,'T','') as Finish
FROM yourTable
WHERE Finish <> 'CUT'
Обновлено:
Глядя на ваш полный запрос, я подозреваю, что вы хотите добавить:
ROUND(AVG(CAST(REPLACE(Finish,'T','') as numeric)),2) as avg_Finish
к вашему SELECT
.
Затем добавьте:
WHERE Finish <> "CUT"
к вашему WHERE
Я попытался использовать REPLACE, как указано, и получил... «Выражение списка SELECT ссылается на столбец Finish, который не сгруппирован и не агрегирован в [13:11]»
Обновлено: Затем добавил оператор GROUP BY и получил... "Недопустимое числовое значение: T72"... так что кажется, что T все еще там.
@WesleyEdward Не могли бы вы поделиться полным запросом? Отредактируйте свой вопрос и добавьте его в
Спасибо, Аарон! Я добавил полный (функциональный) запрос выше в исходном сообщении.
@WesleyEdward Взгляните на мою правку, посмотрите, это то, что вам нужно.
ДА! Я пытался выполнить операторы AVG(CAST() и REPLACE() отдельно, и мне кажется, что эта вложенная установка — именно то, что доктор прописал. Спасибо!!!
@WesleyEdward Хорошая сделка, рад помочь
Возможно ltrim
поможет
select ltrim(finish,'T') --might want to cast to int before calculating avg
from..
where..
Обратите внимание, что ltrim
удаляет все вхождения слева, поэтому, например, он удалит T
как из T6
, так и из TT6
.
Что-то вроде: SELECT REPLACE('Учебник по SQL', 'T', 'M'); может работать (здесь я заменяю t на m). Я не знаю, пытаетесь ли вы обновить данные или выбрать. Но этот пример может помочь вам. Вот с ним же поиграть w3schools.com/sql/…