SELECT a,b from <table_name> GROUP BY a,b,c
。
上記は有効なSQLステートメントですか?
テーブル名がないわけではありません。テーブル名があれば有効ですが、おそらくあまり役に立ちません。
通常、GROUP BY句をいくつかの集計関数(SUM、COUNT、MAX、MINなど)と組み合わせて使用して、グループ化されたフィールドに関連するいくつかの値を導出します。
テーブル名を含める場合、選択されていない要素でグループ化できるかどうかを尋ねていると思います c. はい、できます。
はい、そのクエリは正当な SQL です。それが有用なSQL であるかどうかは、まったく別の問題です。
クエリ
select a , b
from foo
group by a,b,c
次のことを行います。
a
ソース テーブルの行を個別のグループにグループ化し、列の一意の組み合わせごとに 1 と をグループ化しb
ますc
。c
) が破棄されます。グループ化列の 1 つが破棄されるため、指定されたクエリが一意の行のセットであるとは限りません。重複が含まれている可能性があります。たとえば、group by
これらのグループが返されると思いついた場合:
A B C
- - -
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
クエリによって返される結果セットは次のようになります。
A B
- -
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
したがって、必ずしも役立つとは限りません。
いいえ-テーブルが必要です。
SELECT a,b FROM myTable GROUP BY a,b,c
ここで、myTableは、選択するテーブルです(列a、b、およびcが必要です)。
いいえ-テーブル名を指定しなかったためです。持っていた場合は、はい、それは確かにmysqlには有効ですが、Oracleについてはわかりません(これはGROUPingを非常に異なる方法で検証します)。でも意味ない…。
a b c
0 0 0
0 0 1
0 1 0
0 1 1
上記のテーブルにクエリを適用すると、次のようになります。
0 0
0 0
0 1
0 1
そして、それがどのように意味のある結果になるかわかりません-集計値が必要ない場合は、 DISTINCT の方が理にかなっていますが、異なる結果が得られます:
SELECT DISTINCT a, FROM `atable`
0 0
0 1
質問をした本当の理由を説明していただければ、より賢明な回答を試みることができるかもしれません。