web-dev-qa-db-ja.com

SQLのGROUP BYとORDER BYの違いは何ですか

一般的にどちらを使用しますか?例を強くお勧めします!

私はそうMySQLを参照していますが、別のDBMSで概念が異なることを想像することはできません

108
vehomzzz

ORDER BYは、アイテムが返される順序を変更します。

GROUP BYは、指定された列でレコードを集計します。これにより、グループ化されていない列(SUM、COUNT、AVGなど)で集計関数を実行できます。

75
CMerat

ORDER BYは、アイテムが返される順序を変更します。

GROUP BYは、指定された列でレコードを集計します。これにより、グループ化されていない列(SUM、COUNT、AVGなど)で集計関数を実行できます。

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter
231
RiddlerDev

ORDER BY:データを昇順または降順に並べ替えます。

CUSTOMERSテーブルを考慮してください:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

以下は、結果をNAMEで昇順で並べ替える例です。

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

これにより、次の結果が生成されます。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GROUP BY:同一のデータをグループに配置します。

現在、CUSTOMERSテーブルには、重複した名前を持つ以下のレコードがあります。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

同じ名前を1つの名前にグループ化する場合、GROUP BYクエリは次のようになります。

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

これにより、次の結果が生成されます。(同じ名前の場合、最後の名前が選択され、最終的に列が昇順でソートされます)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

あなたがsum、avgなどのようなSQL関数なしでは役に立たないと推測したように。

gROUP BYの適切な使用方法を理解するには、この定義を確認してください。

GROUP BY句は、COUNT()、SUMなどのSELECTリストで適切なAggregate関数を使用して、同一の行を単一/個別のグループにまとめ、各グループの概要を含む単一の行を返すことにより、クエリによって返された行に対して機能します()、MIN()、MAX()、AVG()など.

ここで、各顧客(名前)の給与の合計額を知りたい場合、GROUP BYクエリは次のようになります。

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

これにより、次の結果が生成されます。(同じ名前の給与の合計で、同じ名前を削除した後、NAME列をソートします)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+
67
JerryGoyal

違いは、名前が示すとおりです。つまり、group byはグループ化操作を実行し、order byは並べ替えを実行します。

SELECT * FROM Customers ORDER BY Nameを実行すると、顧客名でソートされた結果リストを取得します。

SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActiveを実行すると、アクティブな顧客と非アクティブな顧客の数が得られます。グループは、指定したフィールドに基づいて結果を集計しました。

23
Max Schmeling

それらは完全に異なる意味を持ち、まったく関連していません。

ORDER BY を使用すると、a-zから名前で最初に並べ替え、次に価格の高い順に並べ替えるなど、さまざまな基準に従って結果セットを並べ替えることができます。

(名前による注文、価格DESC)

GROUP BY を使用すると、結果セットを取得して論理グループにグループ化し、それらのグループで集計クエリを実行できます。たとえば、すべての従業員を選択し、職場の場所ごとにグループ化し、各職場の場所のすべての従業員の平均給与を計算できます。

14

単純なORDER BYは、データとGROUP BYグループを順序付けるか、データを結合します。

ORDER BYは、言及されたフィールドに従って、デフォルトで昇順で結果セットを順序付けます。

ORDER BY (student_roll_number)としてクエリを実行していると仮定すると、生徒のロール番号の昇順で結果が表示されます。ここでは、student_roll_numberエントリが複数回発生する場合があります。

GROUP BYの場合、これを集計関数で使用し、集計関数ごとにデータをグループ化し、結果を取得します。ここで、クエリにSUM (marks)GROUP BY (student_first_name)が含まれている場合、各グループに属する学生のマークの合計が表示されます(グループのすべてのメンバーの名前は同じです)。

8

GROUP BYは、通常、行を集計する(たとえば、一部のフィールドで同じ値を持つ行のセットの合計、平均などを計算する)ときに、選択で行をグループ化するために使用されます。

ORDER BYは、selectステートメントの結果の行の順序付けに使用されます。

4

いくつかの良い例があります。良い明確な例を提供し、独自のSQLを実行できるようにするwebcheatsheetから私自身を追加したいだけです。

SQL Order By

SQL Group By

4
kevchadders
  1. GROUP BYは、指定された列でレコードを集計します。これにより、グループ化されていない列(SUM、COUNT、AVGなど)で集計関数を実行できます。 ORDER BYは、アイテムが返される順序を変更します。
  2. SELECT IsActiveを実行すると、COUNT(*)FROM Customers GROUP BY IsActiveを使用すると、アクティブな顧客と非アクティブな顧客の数を取得できます。グループは、指定したフィールドに基づいて結果を集計しました。 SELECT * FROM Customers ORDER BY Nameを実行すると、顧客の名前でソートされた結果リストが表示されます。
  3. グループ化する場合、結果は必ずしもソートされません。多くの場合、それらは直感的な順序で表示されますが、GROUP句によって保証されるわけではありません。グループをソートする場合は、GROUP BYの後に明示的にORDER BYを常に使用してください。
  4. グループ化されたデータはWHERE句でフィルターできません。注文データはWHERE句でフィルタリングできます。
1
Khadija

ORDER BYは、フィールドを昇順または降順で表示します。 GROUP BYは同じフィールド名、idなどを1つの出力にのみ表示します。

1
Im_khan

GROUP BYは必ずしも必要ではありません(少なくともPostgreSQLでは、おそらく他のSQLバリアントでは)リストでORDER BYを使用できますand使用できるのは引き続きASCまたはDESCper column ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
0
John