SQL에서 GROUP BY와 ORDER BY의 차이점은 무엇입니까


119

일반적으로 언제 사용합니까? 예를 적극 권장합니다!

그래서 MySql을 참조하고 있지만 다른 DBMS에서 개념이 다른 것을 상상할 수 없습니다.

답변:


79

ORDER BY는 항목이 반환되는 순서를 변경합니다.

GROUP BY는 그룹화되지 않은 열 (예 : SUM, COUNT, AVG 등)에 대해 집계 함수를 수행 할 수 있도록 지정된 열별로 레코드를 집계합니다.


130
이 진술은 수반되는 예 없이는 사실상 의미가 없습니다.
— JohnMerlino

2
링크의 페이지에있는 두 번째 예제는 차이점을 이해하기에 충분하다고 생각합니다. tutorialspoint.com/sql/sql-group-by.htm
— nishantbhardwaj2002

예를 들어 주시겠습니까?
— Rice

249

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

2
테이블에 age열이 있고 Peters는 연령이 다르고 쿼리가 SELECT NAME, AGE FROM TABLE GROUP BY NAME이면 어떻게됩니까?
— Varun 2015 년

1
그룹에 속하지 않거나 메서드가있는 열은 반환 할 수 없습니다. 따라서 그룹별로 연령을 추가하거나 Max (Age)와 같은 작업을 수행해야합니다.
— RiddlerDev

78

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 |
+----+----------+-----+-----------+----------+

동일한 이름을 단일 이름으로 그룹화하려는 경우 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 목록에서 적절한 집계 함수를 사용하여 각 그룹에 대한 요약이 포함 된 단일 행을 반환합니다. (), 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 |
+---------+-------------+

25

차이점은 정확히 이름이 의미하는 바입니다. group by는 그룹화 작업을 수행하고 order by 정렬은 수행합니다.

당신이 경우에 SELECT * FROM Customers ORDER BY Name당신은 고객의 이름으로 분류 결과 목록을 얻을.

그렇게 SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive하면 활성 및 비활성 고객의 수가 표시됩니다. 지정한 필드를 기반으로 결과를 집계하여 그룹화합니다.


3
또한 GROUP이면 결과가 반드시 정렬되는 것은 아닙니다. 많은 경우에 직관적 인 순서로 나올 수 있지만 GROUP 절에 의해 보장되지는 않습니다. 그룹을 정렬하려면 항상 GROUP BY 뒤에 명시적인 ORDER BY를 사용하십시오.
— Dave Costa

16

그들은 완전히 다른 의미를 가지고 있으며 전혀 관련이 없습니다.

ORDER BY를 사용하면 az에서 이름을 기준으로 먼저 정렬 한 다음 가장 높은 가격부터 가장 낮은 가격으로 정렬하는 등 다양한 기준에 따라 결과 집합을 정렬 할 수 있습니다.

(이름, 가격 DESC로 주문)

GROUP BY를 사용하면 결과 집합을 가져 와서 논리적 그룹으로 그룹화 한 다음 해당 그룹에 대해 집계 쿼리를 실행할 수 있습니다. 예를 들어 모든 직원을 선택하고 직장 위치별로 그룹화하고 각 직장 위치의 모든 직원의 평균 급여를 계산할 수 있습니다.


8

단순, ORDER BY데이터 및 GROUP BY그룹을 정렬하거나 데이터를 결합합니다.

ORDER BY 언급 된 필드에 따라 결과 집합을 기본적으로 오름차순으로 정렬합니다.

로 쿼리를 실행한다고 가정하면 ORDER BY (student_roll_number)학생의 롤 번호가 오름차순으로 표시됩니다. 여기에서 student_roll_number항목이 두 번 이상 발생할 수 있습니다.

이 GROUP BY경우 집계 함수와 함께 사용하고 집계 함수별로 데이터를 그룹화하여 결과를 얻습니다. 여기에서 쿼리 SUM (marks)와 함께 GROUP BY (student_first_name)있으면 각 그룹에 속한 학생의 점수 합계가 표시됩니다 (그룹의 모든 구성원은 동일한 이름을 가짐).


4

GROUP BY는 일반적으로 행을 집계 할 때 선택에서 행을 그룹화하는 데 사용됩니다 (예 : 일부 필드에 대해 동일한 값을 가진 행 집합에 대한 합계, 평균 계산 등).

ORDER BY는 select 문에서 생성 된 행을 정렬하는 데 사용됩니다.



1

ORDER BY필드를 오름차순 또는 내림차순으로 표시합니다. 동안 GROUP BY쇼 같은 fieldName에, ID의 등을 하나 개의 출력이다.


4
이 답변은 수락 된 답변 또는 제공된 다른 답변에 아직 명시되지 않은 추가 정보를 제공하지 않습니다.
— newfurniturey

1
  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 절로 필터링 할 수 있습니다.

0

주목해야한다 그것은 GROUP BY(PostgreSQL을에서 적어도, 그리고 가능성이 다른 SQL의 변형)을 사용할 수 항상 필요하지 않습니다 ORDER BY목록 및 당신은 여전히 사용할 수 있습니다 ASC또는 DESC 당 열 ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.