でグループや集計機能
idで表のグループから*を選択することはできませんなぜ、なぜ、あってはなりません*
しかし、重合列または列の関数で、
複数のフィールドによってグループが行う方法をよく理解することができますか?
テキスト開始=========== =========
表1で最初に見て、表の名前のテスト:
表1
次のSQL文を実行します。
1 2 |
|
表2に結果を操作します:
表2
しかし、複数の列「と」集約関数」「でグループ」、表2に、表1の手順、架空の中間テーブルを追加することをより良く理解するために:考える方法についてはここでは表3.仮想の話上記のSQL文の実装:
1.FROM試験:文の実行後、元の表のように、表1をもたらすはずです。
2.FROM試験グループによって名:文の実行後、我々は、図2に示すように、仮想テーブル3を生成する想像することができ、このような生成プロセスは、次のとおり名前によってグループは、名前は、同じ名前の行の値を持つ行を見つけるために、 AA名の値について説明したように、それは<1、AA 2>次に、1行にマージし、<2 AA 3>二行1行にマージされ、ID番号の値の全ての値が細胞表面ジェリーに書き込まれます。
3.次のステップは、SELECT文を実行するための仮想テーブル3用です。
あなたは*を選択した場合は(1)の場合、結果は仮想テーブル3が、コンテンツIDおよび一部のユニットジェリーの顔の複数の値の数を返却しなければならない、とリレーショナルデータベースは、セルの関係に基づいているではありませんそれはあなたが見るので、エラーにselect *文を実行し、複数の値を可能にします。
(2)当社は、名前の欄を見て、各セルは一つだけのデータを持っているので、私たちは、名前を選択し、その後、問題はありません。名前欄には、各セルには値を1つだけ持つ、なぜ私たちは名前欄でグループ化するために使用されているので、それがあります。
(3)次に、IDとそれを行う方法のケース内のセルの数のためのより多くのデータがありますか?答えは集約関数は、データ入力、データ出力、複数で使用され、集約関数を使用することです。COUT(ID)、和(数)、各入力は、複数のデータの各々に対する重合セルの関数です。
(4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:
(5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。如下图
(6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图: