1

4 つの列 (COURSE、DISTANCE、GOING & CLASS) を選択し、それらの列をグループ化し、それらの列を並べ替えたときに、レースに勝つための平均時間を計算するクエリを実行したいフライドに代わって質問しています。次に、計算された平均が同じテーブルに挿入されます。これは可能ですか?

彼はこの種の SQL ステートメントを使用しようとしていますが、これは明らかに 1 つのステートメントではありません。

助けてくれてありがとう!

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;

または、UPDATE クエリを実行し、計算のみで AVG_WEIGHT を設定する必要がありますか?

4

2 に答える 2

1

本当にこれを行う必要がある場合は、はい、UPDATEステートメントを使用します(質問を正しく理解していれば)。さらに重要なことは、100 件中 99 件のケースでは、これをまったく行うべきではありません。

データベース設計における主なルールの 1 つは、冗長なデータを格納しないことです。余分なスペースを占有するだけでなく、データの一貫性が失われるという問題もあります。たとえば、誰かがテーブルに戻り、派生列の基になっている列の 1 つを更新しますが、派生列は更新しません。今は間違っています。場合によっては、どのデータ セットを信じればよいかわからない状況に陥ることがあります。

MySQL が計算列をサポートしている場合は、テーブルに計算列を定義できます。それ以外の場合は、通常、実行時にこの値を計算する必要があります。

パフォーマンス上の理由から、冗長データを格納するためにデータベースが非正規化されることがあります。残念ながら、ほとんどの場合、開発者は、他の方法では修正できないパフォーマンスの問題が実際に存在することを最初に確認せずにこれを行います。このパターンを使用したいほとんどの開発者は、自分たちのパターンがこの設計規則を無視すべき特殊なケースであることを確信しています。しかし、私の経験では、ほとんどの場合、それらは間違っています。

于 2011-10-14T14:37:15.037 に答える
0
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 として新しい列を追加したかったので、それは永続的なままにする必要があるため、新しいテーブルを作成し、(max_salary-min_salary) 計算でD_JOBSすべてのデータをフェッチしましたCPY_JOBS


クエリからアイデアが得られると思います。ありがとうございます。

于 2016-07-24T09:13:07.697 に答える