Вставьте значение в новый столбец таблицы, рассчитанный по данным из той же таблицы - PullRequest
1 голос
/ 14 октября 2011

Я спрашиваю от имени фридом, который хотел бы сделать запрос, который вычисляет среднее время для победы в гонке при выборе 4 столбцов (COURSE, DISTANCE, GOING & CLASS), группировании этих столбцов и упорядочении этих столбцов. Вычисленное среднее затем вставляется в ту же таблицу. Возможно ли это?

Он пытается использовать такого рода оператор SQL, который, очевидно, не является одним оператором, поскольку я не уверен, как его составить.

Спасибо за любую помощь!

INSERT 
INTO Table1 (AVGTIMECOLUMN) VALUES (AVERAGE)
SELECT Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4 Avg(Table1.TIME) AS AVERAGE, 
FROM Table1
GROUP BY Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4
ORDER BY Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4;

Или мне нужно выполнить запрос ОБНОВИТЬ и установить AVG_WEIGHT только с расчетом?

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Если вам действительно нужно это сделать, тогда да, вы бы использовали утверждение UPDATE (если я правильно понимаю ваш вопрос). Что еще более важно, в 99 случаях из 100 вы не должны делать это вообще.

Одним из основных правил в дизайне базы данных является то, что вы не должны хранить избыточные данные. Помимо того, что он занимает дополнительное место, у него также есть проблемы с несогласованностью данных. Например, кто-то возвращается к таблице и обновляет один из столбцов, на которых основан производный столбец, но не обновляет производный столбец. Теперь это неправильно. В некоторых случаях вы сталкиваетесь с ситуацией, когда вы не знаете, какому набору данных верить.

Если MySQL поддерживает вычисляемые столбцы, вы можете определить один из них в таблице. В противном случае вы, как правило, должны вычислять это значение во время выполнения.

Иногда база данных денормализована для хранения избыточных данных по соображениям производительности. К сожалению, в большинстве случаев разработчики делают это без предварительного подтверждения того, что на самом деле существует проблема с производительностью, которая не может быть исправлена ​​другим способом. Большинство разработчиков, которые хотят использовать этот шаблон, уверены, что их является особым случаем, когда они должны игнорировать это правило дизайна. Но по моему опыту, в большинстве случаев они не правы.

0 голосов
/ 24 июля 2016
CREATE TABLE D_JOBS AS 

SELECT JOB_ID, JOB_TITLE, MAX_SALARY, MIN_SALARY,(MAX_SALARY-MIN_SALARY)AS DIFF_SALARY FROM CPY_JOBS

WHERE (MAX_SALARY-MIN_SALARY) >0

Первоначально

Table name = CPY_JOBS; that containing (job_id, job_title, max_salary, min_salary)

Я хотел добавить новый столбец как diff_salary, и он должен оставаться постоянным, поэтому я создал новую таблицу как D_JOBS и получил все данныеCPY_JOBS с вычислением (max_salary-min_salary)


Я думаю, вы получите представление из запроса, спасибо.

...