私は何かを整理するのに少し助けが必要ですが、私はそれは非常に簡単な質問ですが、それはSQLで私を少し混乱させるものです。GROUP BY/SQLの集約関数の混乱
このSQLクエリは、Oracleでは「NOT GROUP BY式」エラーをスローします。なぜタプルの属性でグループ化すると、他の属性にアクセスすることができなくなることがわかっているように私は理解しています。
SELECT *
FROM order_details
GROUP BY order_no
しかしこれはタプルIグループと、作られる各注文のORDER_DETAILS内に複数のタプルがあると仮定すると....ちょうどこの上で私の理解をコンクリートに
SELECT SUM(order_price)
FROM order_details
GROUP BY order_no
に動作しますorder_noによれば、グループ内の個々のタプルのorder_price属性にはまだアクセスできますが、集計関数を使用するだけですか?
つまり、SELECT句で使用される集約関数は、グループにドリルダウンして「隠し属性」を参照することができます。単に「SELECT order_no」を使用するとエラーがスローされます。
これを明確にするお手伝いをしていただきありがとうございます。Googleでこの特定の質問に対する回答を見つけることが困難でした。あなたはGROUP BYを使用するときにクリス
OK、GROUP BYを実行した後も、特定のorder_noの個々のタプルは、集計関数によって引き続きアクセス可能です。つまり、これらのタプルはorder_noでグループ化されていても、SUM関数は各タプルのorder_price属性にアクセスできますか? – Chris
@Chris:はい、多かれ少なかれ。 GROUP BYは、テーブル内の行をグループに分けて考えることができます。各グループには、GROUP BY句にリストされている列と同じ値のセットがあります。集計は、指定された列のいずれかで操作され、集計はグループ内の行に基づいて計算されます。結果は、GROUP BY列の値に関連する集計を加えた1グループあたり1行で構成されます。ハムム...私はそれがはっきりしていることを願って... –
それは完全に私が言うことができる限りそれをクリアしています。おかげさまでジョナサンと他の人に感謝しました。 – Chris