SQL compute byの使用分析を検討する。

1894 ワード

GROUTP BY子文には、戻りの結果集は合計データのみで、元の詳細記録はないという欠点があります。SQL SERVERでこの仕事を完成したいなら、COMPUTE BY子文が使えます。COMPTE生成合計は、付加的な小計列として結果集の最後に表示されます。BYと一緒に使用すると、COMPUTE文は結果セット内で制御中断と小計を生成します。
以下のSELECT文は簡単なCOMPUTE子文を使用してtitles表のpriceとadvanceの合計を生成します。

USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
以下のクエリはCOMPUTE子文にオプションのBYキーワードを追加して、各グループの小計を生成します。
USE pubs

SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
このSELECT文の結果は12個の結果セットで返します。6つのグループのそれぞれは2つの結果セットがあります。各グループの最初の結果セットは、選択リストで要求された情報を含む行セットである。各グループの第二の結果セットは、COMPUTE文の中の二つのSUM関数の小計を含む。
computte by子文のルール:
(1)distinctは行統計関数と一緒に使用できません。
(2)compute?by子文の中?の列は選択リストに必ず表示されます。
(3)computte by子文を含む語句にselect into子文を使ってはいけません。comput子文を含む語句に不規則な行が発生します。
(4)coputte by子文を使用する場合は、order by子文を使用しなければなりません。またcoputte by子文の列はorder by子文に含めなければなりません。列の前後の順序と開始項目は一致します。
(5)computeでbyを省略した場合、order byも省略できます。
(6)computte byサブ句が複数の列を含む場合、一つのグループ(最初の列のグループ)をいくつかのサブグループに分け(後ろの列を利用して)、各階層のサブグループを統計します。
(7)複数のcompute by子文を使用する場合は、それぞれ異なるグループで結果を集計します。詳細は通常の最初のグループで表示されます。
(8)computte by子文には複数の統計関数が使用できます。彼らは互いに影響しません。
(9)coputte by子文にはbyを含まず、coputteのみ  この場合は前の情報グループではなく、すべての情報だけを集計します。
COMPUTEとGROUT BY COMPUTEとGROUTP BYとの違いを要約すると、GROUT BYが単一の結果セットを生成します。各グループには、グループごとに、グループごとにグループ化された集合関数の列と表示を含む行のみがあります。選択リストには、列および集計関数によるグループのみが含まれます。
COMPUTEは、複数の結果セットを生成します。クラスの結果セットには、選択リスト内の表式が含まれています。別の種類の結果セットは、グループのサブアグリゲーション、またはSELECT文の集合を含む。選択リストには、列または集計関数以外のグループの他の表式が含まれます。集計関数は、選択リストではなく、COMPUTE下位文で指定されています。以下のクエリーはGROUT BYと集計関数を使用します。このクエリは、グループごとにグループの統合小計:USE pbs SELECT type、SUM(price)、SUM(advance)、FROM titles GROUT BY typeが含まれています。COMPUTEまたはCOMPUTE BY子文には、ポイント、textまたはimageのデータタイプが含まれてはいけません。