Oracleは、複数行のノートを使用してネストされた関数とグループ化句について

あなたは知っておく必要があります

分類機能:GROUP BY句を述べ、あなたが何かを理解する必要があります。単一の関数(単一行関数)、マルチライン機能(複数行の関数):分類機能を言及し、あなたは即座にOracleで機能分類を考えた私の心の中が必要です。Oracleの分類システムの機能である意志2は、非常に重要ですので、中国語、英語がダウンして戻って送ってください。その後、この知識に遭遇し、あなたは少なくとも来て、自信を持って、口の中にできるはずです。

Shajiao一方向関数

今揚げ栗の場合:あなたは、EMP表でチェックしたいとし、すべての人の名前と彼の対応する給与は、次の文を発行し、結果を取得します。

SQL> select ename,sal from emp;

ENAME               SAL
-------------------- ----------
SMITH               800
ALLEN              1600
WARD               1250
JONES              2975
MARTIN             1250
BLAKE              2850
CLARK              2450
SCOTT              3000
KING               5000
TURNER             1500
ADAMS              1100
JAMES               950
FORD               3000
MILLER             1300

14 rows selected.

あなたは結果に14行を見つけるだろう、すべての人の名前が(注:SCOTTスコットは2つの値であり、Oracleのステートメントは、大文字と小文字が区別はありませんが、格納された値は、大文字と小文字が区別されます)資産計上されます。あなたはあなたが見るために使用されていないと言う、「小」の文字などのプロセスの名前を表示するかどうかを尋ねましたか?

ここでは、それが何であるか、下の()のものを与えますか?最初に、「機能」、それを呼び出すために、我々はそれに対処するためにそれを使用する名前はどうか:以下のコマンドを発行し、結果を取得します。

SQL> select lower(ename),sal from emp;

LOWER(ENAME)            SAL
-------------------- ----------
smith               800
allen              1600
ward               1250
jones              2975
martin             1250
blake              2850
clark              2450
scott              3000
king               5000
turner             1500
adams              1100
james               950
ford               3000
miller             1300

14 rows selected.

あなたはまた、より重要なのは、処理後に、設定された行数(14行)と、結果セット(ライン14)の前に処理された行数の結果とまったく同じ、下の関数処理の採択後に小文字にすべての変更をその名前を検索します(値を返すように、結果セット内の行ごとに)一方向関数:である、この低い値処理機能と、最終結果は、我々はこの関数を下げると呼ばれるように、エントリ数プレゼンテーションの比です。

Shajiaoマルチライン機能

あなたは、EMP表のすべての給与の合計をチェックし、次の文を発行し、結果を取得したいと言います。

SQL> select sum(sal) from emp;

  SUM(SAL)
----------
     29025

この合計値が関数でもある何、あなたはこの和sum関数の使用は、最終的にデータの行を返すことがわかります。マルチライン機能(のために:私たちは、この和関数を呼び出すように和を使用して、元の14行は、1行になり、各結果セットを返す唯一の値)。それほど気にしてはいけません複数行の場合のみ、戻り値は、複数行の関数を呼び出し

コンセプト<各結果セット>を理解する方法

例を見て:部門、クエリの各部門の合計給与によると、その後、次の文を発行し、結果を取得します。

SQL> select deptno,sum(sal) from emp group by deptno order by 1;

    DEPTNO   SUM(SAL)
---------- ----------
    10   8750
    20  10875
    30   9400

結果はのために提示されている三行、データの14最前線の治療の合計、合計集計関数によって処理されたデータの3行を取得するには、私が尋ねる:合計は、マルチライン機能ですか?もちろん!あなたが考える場合は、ここでは基本的な概念を理解しています:行が複数の行のためのマルチライン機能と呼ばれて戻ります。私は複数の行(14行)ではなく、1ライン分の3行を返したため、この例を通じて、私は、あなたに異議を唱えることができます。あなたは合計がマルチライン機能ではないことを教えてもらえますか?そのため、この引数自体が曖昧です。

複数行の関数の公式教科書正確な説明はこれです:SET行あたりの結果の戻りひとつ。これはどういう意味?各行のセット(または結果セットとして理解は)のために(、行である)の値を返します。だから、マルチライン機能のあなたの概念がボーッとしません、覚えておいてください。

ことを理解する方法ラインセット(セットの結果)この概念を?我々はすべてのセクター(SAL)で賃金の総和を求め、このラインは、データの14行を設定し、最終的に合計である行を返しています。私たちは、各部門の給与の合計を求めて、部門をたどるので、別の部署に従うように、各部門は、賃金の合計が決定し、我々は次の行番号10個の部門を見て:

SQL> select count(1) from emp where deptno=10;

  COUNT(1)
----------
     3

第10部門データの3つの行があり、従って、行10セクタ賃金和のセットのためのデータを算出することにより三行、三行であり、そして最終的には、総賃金10部門である行を返します。

番号20の部署で見てみましょう:したがって、データの5行の合計は、20部門のために、行が5行、1行の最終的なリターンを設定されている部門、総賃金は20部門です。

SQL> select count(1) from emp where deptno=20;

  COUNT(1)
----------
     5

米国特許第30部門は同じである:データの6行の合計は、従って、30個のセクタのために、行を6行に設定され、そして最終的には、賃金総額30部門である行を返します。

SQL> select count(1) from emp where deptno=30;

  COUNT(1)
----------
     6

句の使用規則により、グループ

  • 使用マルチライン機能は、group by句を使用する必要はありません

例:すべての合計は、部門の賃金を問い合わせます

SQL> select sum(sal) from emp;
  • select句は、group by句に含まれている必要があり、すべてのフィールド(マルチラインの機能を除くフィールド)が含まれ

たとえば:セクター別賃金の合計は、各部門のためのクエリをグループ化します

SQL> select deptno,sum(sal) from emp group by deptno;

注:複数行フィールドはSAL機能を使用するため、句によってバック基のみDEPTNOを含有することができるので、DEPTNO句は、二つのフィールドとSUM(SAL)を含有する選択。

  • すべてのフィールドは、句の使用を複数行機能を選択し、group by句は、必要に応じてパケットフィールドを指定することができ
# 以下语句都是正确的。从业务逻辑层面来说,毫无意义,只是为了展示语句规则。
SQL> select sum(sal) from emp group by ename;
SQL> select sum(sal) from emp group by ename,empno;
SQL> select sum(sal) from emp group by ename,empno,sal;
  • 句によって、ネストされたマルチライン機能群を使用しなければなりません

注ネストされた関数こと:ネストされた関数は、関数ではなく、機能の説明は、使用のために添加しました。たとえば、次のどの部門最高賃金の合計を計算しました。

SQL> select max(sum(sal)) from emp group by deptno;

MAX(SUM(SAL))
-------------
    10875

MAX(SUM(SAL))は、ネストされた層をネストネストされた関数、複数行の関数です。ネストされた無制限の一方向関数。

  • select句は、複数行の関数のネストに加えて、他のフィールドを許可していません。

例:次の文のエラー

SQL> select deptno,max(sum(sal)) from emp group by deptno;
select deptno,max(sum(sal)) from emp group by deptno
       *
ERROR at line 1:
ORA-00937: not a single-group group function

071試験を参照してください。

Which query is valid?

A. SELECT dept_id,join_date,sum(salary) FROM employees GROUP BY dept_id,join_date;
B. SELECT dept_id,join_date,sum(salary) FROM employees GROUP BY dept_id;
C. SELECT dept_id,MAX(AVG(salary)) FROM employees GROUP BY dept_id;
D. SELECT dept_id,AVG(MAX(salary)) FROM employees GROUP BY dept_id;

答え:A

おすすめ

転載: www.cnblogs.com/askscuti/p/12134220.html