#mysql #sql #sql-update #average #sql-insert
#MySQL #sql #sql-обновление #Среднее #sql-вставка
Вопрос:
Я спрашиваю от имени фрида, который хотел бы выполнить запрос, который вычисляет среднее время для победы в гонке при выборе 4 столбцов (КУРС, ДИСТАНЦИЯ, ДВИЖЕНИЕ и КЛАСС), группируя эти столбцы и упорядочивая эти столбцы. Затем вычисленное среднее значение вставляется в ту же таблицу. Возможно ли это?
Он пытается использовать такой оператор 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 только с вычислением?
Ответ №1:
Если вам действительно нужно было это сделать, то да, вы бы использовали UPDATE
оператор (если я правильно понимаю ваш вопрос). Что еще более важно, в 99 случаях из 100 вы вообще не должны этого делать.
Одним из основных правил проектирования баз данных является то, что вы не должны хранить избыточные данные. Помимо того, что он занимает дополнительное пространство, у него также есть проблемы с непоследовательностью данных. Например, кто-то возвращается к таблице и обновляет один из столбцов, на котором основан производный столбец, но не обновляет производный столбец. Теперь это неправильно. В некоторых случаях вы сталкиваетесь с ситуацией, когда вы не знаете, какому набору данных верить.
Если MySQL поддерживает вычисляемые столбцы, вы можете определить один из них в таблице. В противном случае вы обычно должны вычислять это значение во время выполнения.
Иногда база данных денормализуется для хранения избыточных данных по соображениям производительности. К сожалению, в большинстве случаев разработчики делают это без предварительного подтверждения того, что на самом деле существует проблема с производительностью, которую нельзя исправить каким-либо другим способом. Большинство разработчиков, которые хотят использовать этот шаблон, уверены, что их особый случай, когда они должны игнорировать это правило проектирования. Но, по моему опыту, в большинстве случаев они ошибочны.
Комментарии:
1. Среднее значение вычисляется по всем выигрышным временам на определенном курсе, а затем вставляется как значение, относящееся к определенному курсу. Я только что узнал, когда спрашивал его дальше, что у него все хранится в одной таблице, и, очевидно, вы заметили избыточность… итак, я поручил ему создать вторую таблицу, которую, как я предполагал, он уже сделал! итак, я полагаю, что новый расчет будет заключаться в том, чтобы просто выбрать время выигрыша, если идентификатор курса =»1″, и вычислить среднее значение, а затем вставить его в таблицу информации о курсе ?! Спасибо за быстрый ответ и помощь!
2. Даже при таком подходе у вас все еще есть проблема избыточных данных, которые, вероятно, со временем станут непоследовательными.
Ответ №2:
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)
Я хотел добавить новый столбец как difference_salary, и он должен оставаться постоянным, поэтому я создал новую таблицу as D_JOBS
и извлек все данные из CPY_JOBS
вычисления (max_salary-min_salary)
Я думаю, вы получите представление из запроса спасибо.