SQLクエリを関係代数クエリに変換する必要がある割り当てを行っていました。group by
句の変換で行き詰まりました。
groupby句を関係代数で書く方法を教えてください。
例えば:
SELECT job, sal
FROM emp
GROUP BY job
;
ありがとう!
SQLクエリを関係代数クエリに変換する必要がある割り当てを行っていました。group by
句の変換で行き詰まりました。
groupby句を関係代数で書く方法を教えてください。
例えば:
SELECT job, sal
FROM emp
GROUP BY job
;
ありがとう!
チュートリアル Dで、給与の合計を取得したいことに注意してください。
SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
集約は関係演算子ではないため、関係代数の一部を形成しないことに注意してください。
に関してはHAVING
、それは歴史的な異常ですか。SQL-92 標準より前では、句 (別名派生テーブル)SELECT
に式を記述することはできませんでした。つまり、すべての作業を 1 つの式で行う必要がありました。SQL の厳格な評価順序のため、句が評価された後に集計値は存在しません。つまり、集計値に基づいて制限を適用することは不可能でした。この問題に対処するために導入されました。FROM
SELECT
WHERE
HAVING
しかしHAVING
、派生テーブルが導入されるまで、SQL は Codd に関しては関係的に不完全なままでした。派生テーブルはHAVING
冗長にレンダリングされますが、使用HAVING
は依然として一般的です (Stackoverflow がうまくいく場合): 人々SELECT
は可能な限り単一を使用することを好むようであり、SQL の前述の評価順序に関する厳格さ (射影はSELECT
式の最後に実行されます) により、派生テーブルが作成されます。と比較すると、使用法は非常に冗長HAVING
です。
まず、クエリが間違っているため、集計を使用しない限り、グループ化していないものを選択できません。サルの合計を取得したいと思います。
ジョブ F 合計 (sal)、ジョブ (emp)。