GROUP BY
特定のの個別の値ごとに、行のグループを1つの行にマップします 列。必ずしも選択リストに含まれている必要はありません。
SELECT b, c, d FROM table1 GROUP BY a;
このクエリは正当なSQLです(修正: MySQLのみ。実際には、標準のSQLではなく、他のブランドではサポートされていません)。 MySQLはそれを受け入れ、b
を選択して、自分が何をしているかを知っていると信頼します。 、c
、およびd
a
の機能依存性であるため、明確な方法で 。
ただし、Microsoft SQL Serverおよびその他のブランドでは、機能の依存関係を簡単に判断できないため、このクエリは許可されていません。 編集: 代わりに、標準SQLでは単一値ルールに従う必要があります つまり、選択リストのすべての列は、GROUP BY
で名前を付ける必要があります 節または集合関数の引数になります。
一方、DISTINCT
常に選択リスト内のすべての列を調べ、それらの列のみを調べます。 DISTINCT
というのはよくある誤解です 列を指定できます:
SELECT DISTINCT(a), b, c FROM table1;
DISTINCT
を作成する括弧にもかかわらず 関数呼び出しのように見えますが、そうではありません。これはクエリオプションであり、選択リストの3つのフィールドのいずれかに個別の値があると、クエリ結果に個別の行が表示されます。この選択リストの式の1つには括弧が付いていますが、これは結果に影響しません。