GROUPBYは「重複を削除」しません。 GROUPBYでは集計が可能です。重複した行を結合するだけの場合は、SELECTDISTINCTを使用します。
一部の列で重複している行を組み合わせる必要がある場合は、GROUP BYを使用しますが、他の列をどうするかを指定する必要があります。それらを省略したり(SELECT句にリストしないことにより)、またはそれらを集約したり(SUM、MIN、AVGなどの関数を使用)することができます。例:
SELECT watch.watch_id, COUNT(rec.street_number), MAX(watch.watch_date)
... GROUP by watch.watch_id
編集
OPはいくつかの説明を求めました。
「ビュー」(FROMとJOINおよびWHEREによってまとめられたすべてのデータ)をVと呼びます。実行したいことが2つあります。
まず、完全に重複した行がある可能性があります 組み合わせたいもの:
a b c
- - -
1 2 3
1 2 3
3 4 5
次に、DISTINCTを使用します
SELECT DISTINCT * FROM V;
a b c
- - -
1 2 3
3 4 5
または、部分的に重複する行がある可能性があります 組み合わせたいもの:
a b c
- - -
1 2 3
1 2 6
3 4 5
これらの最初の2行は、ある意味では「同じ」ですが、別の意味では明らかに異なります(特に、 SELECT DISTINCTによって結合されます)。それらを組み合わせる方法を決定する必要があります。列cを重要でないものとして破棄できます:
SELECT DISTINCT a,b FROM V;
a b
- -
1 2
3 4
または、それらに対して何らかの集計を実行することもできます。それらを合計することができます:
SELECT a,b, SUM(c) "tot" FROM V GROUP BY a,b;
a b tot
- - ---
1 2 9
3 4 5
最小値を選択して追加できます:
SELECT a,b, MIN(c) "first" FROM V GROUP BY a,b;
a b first
- - -----
1 2 3
3 4 5
または、平均(AVG)、標準偏差(STD)、およびcの値の束を取り、それらを1つに結合する他の関数の束を取得することもできます。
実際にはオプションではないのは、何もしないことです。グループ化されていない列をリストするだけの場合、DBMSはエラーをスローするか(Oracleはそれを実行します-正しい選択、imo)、または1つの値を多かれ少なかれランダムに選択します(MySQL)。しかし、Peart博士が言ったように、「あなたが決定しないことを選択したとき、あなたはまだ選択をしました。」