2014-11-30 2 views
0

Я начинаю с SQL и пытаюсь написать запрос, который в настоящее время выходит за рамки моих возможностей. Возможно, это осложняется тем фактом, что таблица, с которой я работаю, по причинам, которые я не могу контролировать или изменять, не имеет первичного ключа. Это база данных MySQL. Вот упрощенная версия таблицы, только четыре строки:Обновление значения строки в MySQL путем усреднения значений из подмножества других строк

pid year name   team wOBAplus PA 
147 2002 Barry Bonds  MTL  0.466  276 
147 2002 Barry Bonds  OAK  0.495  318 
147 2002 Barry Bonds    NULL  594 
147 2003 Barry Bonds  OAK  0.456  522 
212 2014 Mike Trout  SEA  0.391  567 

Столбца wOBAplus имеет значение для всех строк, где столбец команды не является пустым. То, что я хотел бы сделать, это добавить значения в остальных строках, используя следующую формулу:

wOBAplus_noteam = (sum(wOBAplus_team * PA_team))/PA_noteam 

Таким образом, в этом случае, я хотел бы в wOBAplus, который в настоящее время NULL обновлена ​​(0,466 * 276 + 0.495 * 318)/594. Я бы хотел, чтобы все остальные строки игнорировались.

Это что-то, что может быть достигнуто с использованием таблицы как в настоящее время структурированной? Если нет, то каковы мои альтернативы?

Заранее благодарим за любую помощь, которую вы можете предоставить.

+0

почему только первые два значения в формуле? –

+0

Руслан, я не уверен, что вы просите. Формула - это именно то, что нужно для получения желаемого результата. Обратите внимание, что вся эта формула дает вам ребята математическую формулу, которая должна использоваться в запросе. – jda

+0

У вас есть только '0.466' и' 0.495' в вашем примере. Должны ли быть все ненулевые значения? –

ответ

1

Я думаю, что это то, что вы хотите:

UPDATE Table1 
JOIN (
    SELECT pid, year, SUM(wOBAplus*PA) AS woa 
    FROM Table1 
    GROUP BY pid, year 
) a ON a.pid = Table1.pid AND a.year = Table1.year 
SET wOBAplus = woa/pa 
WHERE wOBAplus IS NULL 

Sample SQL Fiddle

+1

Очень простая, отлично работала, и скрипка была полезной. – jda

Смежные вопросы