2

SQLクエリを関係代数クエリに変換する必要がある割り当てを行っていました。group by句の変換で行き詰まりました。

groupby句を関係代数で書く方法を教えてください。

例えば:

SELECT job, sal 
  FROM emp
 GROUP BY job
       ;

ありがとう!

4

2 に答える 2

3

チュートリアル Dで、給与の合計を取得したいことに注意してください。

SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )

集約は関係演算子ではないため、関係代数の一部を形成しないことに注意してください。

に関してはHAVING、それは歴史的な異常ですか。SQL-92 標準より前では、句 (別名派生テーブル)SELECTに式を記述することはできませんでした。つまり、すべての作業を 1 つの式で行う必要がありました。SQL の厳格な評価順序のため、句が評価された後に集計値は存在しません。つまり、集計値に基づいて制限を適用することは不可能でした。この問題に対処するために導入されました。FROMSELECTWHEREHAVING

しかしHAVING、派生テーブルが導入されるまで、SQL は Codd に関しては関係的に不完全なままでした。派生テーブルはHAVING冗長にレンダリングされますが、使用HAVINGは依然として一般的です (Stackoverflow がうまくいく場合): 人々SELECTは可能な限り単一を使用することを好むようであり、SQL の前述の評価順序に関する厳格さ (射影はSELECT式の最後に実行されます) により、派生テーブルが作成されます。と比較すると、使用法は非常に冗長HAVINGです。

于 2011-10-13T13:13:04.953 に答える
1

まず、クエリが間違っているため、集計を使用しない限り、グループ化していないものを選択できません。サルの合計を取得したいと思います。

ジョブ F 合計 (sal)、ジョブ (emp)。

于 2011-10-11T15:07:44.573 に答える