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.