行を選択すると、「集計関数」が使用されていない限り、SQLは各行を個別に調べます。集計は、たとえば、sum()、count()、avg()、min()、およびmax()です。(さらに多くのベンダーSQLパッケージで。)これが、結果セットにAの2つの「コピー」が含まれる理由です。SQLは、2つの異なる行であるため、それぞれを個別に表示します。代わりに、これらの関数を使用して集計値を見つけることができます。
SQLが集計を調べるとき、調べる行を知る必要があります。デフォルトでは、クエリで使用されるすべての数量が集計である場合、すべての行が調べられます。たとえば、あなたの例では、基準に一致する列のすべての値の合計であるSelect Sum(Quantity) from SomeTable where Parameter1='x'
を返します。40
Unit
行のグループの集合体、この場合は同じ値を持つアイテムを探しています。Group By
SQLにこれを伝えるには、句を使用してグループを定義する方法をSQLに伝える必要があります。Bluefeetの回答が指摘しているように、これは次のように書くことで実行できます。
SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit
一般的なポインタとして、グループ化せずに集計と値を検索する場合、クエリは失敗します。たとえば、クエリをParameter1 ='x'に制限する代わりに、行に関連付けられているパラメータを確認したい場合は、これを選択リストに追加しSELECT Unit, Sum(Quantity), Parameter1...
てクエリを実行したくなるかもしれません。SQLはパラメータを見つけるためにどの行を調べるべきかわからないため、これは機能しません。
必要に応じて、複数の列でグループ化できます。より複雑なグループが必要な場合は、さらに多くのトリックを使用できます。たとえば、caseステートメントまたは行の関数をグループ化して、偶数のすべてのアイテムの合計、または100ユニットを超える注文の平均注文サイズを見つけることができます。