2009-08-14 5 views

답변

70

ORDER 다른 DBMS에 다른되는 개념을 상상할 수 없다.

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

+84

이 문장은 함께 제공되는 예제가 없으면 사실상 의미가 없습니다. – JohnMerlino

+2

링크의 두 번째 예가 차이점을 이해하기에 충분하다고 생각합니다. http://www.tutorialspoint.com/sql/sql-group-by.htm – nishantbhardwaj2002

+0

예제를 제공해 주시겠습니까? – Rice

3

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

ORDER BY는 select 문으로 인해 생성 된 행을 정렬하는 데 사용됩니다.

19

차이점은 이름이 의미하는 것과 정확히 같습니다. 그룹화 기준은 그룹화 작업을 수행하고 정렬은 정렬을 수행합니다.

SELECT * FROM Customers ORDER BY Name을 수행하면 고객 이름순으로 결과 목록이 정렬됩니다.

SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive을 수행하면 활성 고객과 비활성 고객 수가 계산됩니다. 그룹은 지정한 필드를 기반으로 결과를 집계합니다.

+2

또한 GROUP의 경우 결과가 반드시 정렬되지는 않습니다. 대부분의 경우 직관적 인 순서로 나올 수 있지만 GROUP 절에 의해 보장되지는 않습니다. 그룹을 정렬하려면 GROUP BY 다음에 항상 ORDER BY를 사용하십시오. –

202

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

테이블에 '연령대'열이 있고 Peters의 나이가 다른데 쿼리가 이름이 SELECT, 나이가 TABLE GROUP BY NAME입니까? – Varun

+1

그룹에 속하지 않거나 메소드가없는 열은 반환 할 수 없습니다. 따라서 그룹을 기준으로 나이를 추가하거나 Max (Age)와 같은 작업을 수행해야합니다. – RiddlerDev

10

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

ORDER BY을 사용하면 결과 집합을 다른 기준에 따라 정렬 할 수 있습니다. 예를 들어 a-z의 이름순으로 정렬 한 다음 가장 높은 가격부터 가장 낮은 가격 순으로 정렬 할 수 있습니다.

(이름 BY ORDER, 가격 DESC)은

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

3

몇 가지 좋은 예가 있습니다. webcheatsheet에서 내 자신을 추가하는 것만으로도 좋은 예제를 얻을 수있을뿐만 아니라 자신 만의 SQL을 실행할 수도 있습니다. 간단한

SQL Group By

7

SQL Order By

, ORDER BY 주문 데이터와 GROUP BY 그룹 또는 데이터를 결합합니다.

ORDER BY은 기본적으로 위에서 설명한 필드에 따라 결과 집합을 오름차순으로 정렬합니다.

검색어를 ORDER BY (student_roll_number)이라고 가정하면 학생의 롤 번호가 오름차순으로 표시됩니다.여기에서 student_roll_number 항목이 두 번 이상 나타날 수 있습니다.

GROUP BY 케이스에서는 집계 함수와 함께이 함수를 사용하고 집계 함수에 따라 데이터를 그룹화하고 결과를 얻습니다. 여기서 검색어가 SUM (marks)과 함께 GROUP BY (student_first_name) 인 경우 각 그룹에 속한 학생의 점수 합계가 표시됩니다 (그룹의 모든 구성원은 동일한 이름을 가짐).

1

ORDER BY은 오름차순 또는 내림차순으로 필드를 표시합니다. GROUP BY은 동일한 필드 이름을 표시하지만, 하나의 출력에서만 ID 등이 표시됩니다. 그것은 GROUP BY 주목해야한다

+4

이 대답은 수락 된 응답 또는 주어진 다른 대답에 대해 아직 언급하지 않은 추가 정보를 제공하지 않습니다. – newfurniturey

0

은 항상 당신이 목록 ORDER BY을 사용할 수 있습니다로 (적어도 PostgreSQL을, 그리고 다른 SQL 변종의 가능성이) 필요하지 않으며 당신은 여전히 ​​ASC 또는 DESC 열마다 사용할 수 있습니다 .. .

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

ORDER BY : 정렬 오름차순 또는 내림차순으로 데이터입니다.

이 테이블 고객에 고려 :

SQL> SELECT * FROM CUSTOMERS 
    ORDER BY NAME; 

이것은 다음과 같은 결과를 생성합니다 :

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

이 따르는 것은 이름에 의해 오름차순으로 결과를 정렬 할 예입니다 :

+----+----------+-----+-----------+----------+ 
| 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 :은 그룹으로 동일한 데이터를 정렬합니다.

이제 고객에 테이블에 중복 된 이름에는 다음과 같은 기록이있다 : 당신이 하나의 이름으로 그룹과 동일한 이름을 원하는 경우

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

을, 다음 쿼리 BY GROUP가 될 것이다 다음과 같이

SQL> SELECT * FROM CUSTOMERS 
    GROUP BY NAME; 

그러면 다음 결과가 생성됩니다. (동일한 이름의 경우 마지막 이름을 선택하고 오름차순으로 정렬)

당신이 합계, 평균 등과 같은 SQL 기능없이 아무 소용 것으로 추정대로210
+----+----------+-----+-----------+----------+ 
    | 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 | 
    +----+----------+-----+-----------+----------+ 

..

그렇게 BY GROUP의 적절한 사용을 이해하기 위해이 정의를 통해 이동 :

을 GROUP BY 절은 동일한 행을 단일/고유 그룹으로 요약하여 쿼리에 의해 반환 된 행에 대해 작업하고 SELECT 목록의 적절한 집계 함수를 사용하여 각 그룹에 대한 요약과 함께 단일 행 을 반환합니다 (예 : COUNT), SUM(), MIN(), MAX(), AVG(), 등각 고객 (이름)에 급여의 총액을 알고 싶다면

이제, 다음 쿼리 BY GROUP가 될 것이다 다음과 같이

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

이 다음과 같은 결과를 얻을 것이다 : (합 와 동일한 이름의 급여의 것은

+---------+-------------+ 
| NAME | SUM(SALARY) | 
+---------+-------------+ 
| Hardik |  8500.00 | 
| kaushik |  8500.00 | 
| Komal |  4500.00 | 
| Muffy | 10000.00 | 
| Ramesh |  3500.00 | 
+---------+-------------+ 
1
  1. GROUP BY 당신을 허용하는 지정된 열을 기준으로 기록을 집계합니다) 동일한 이름을 제거한 후 이름 열을 정렬 그룹화되지 않은 열 (예 : SUM, COUNT, AVG 등)에 대해 집계 함수를 수행 할 수 있습니다. ORDER BY는 항목이 반환되는 순서를 변경합니다.
  2. 고객이 GROUP BY IsActive 에서 IsActive, COUNT (*)를 선택하면 활성 고객과 비활성 고객 수가 표시됩니다. 그룹은 지정한 필드를 기반으로 결과를 집계합니다. SELECT * FROM Customers ORDER BY 이름 고객 이름순으로 정렬 된 결과 목록을 얻습니다.
  3. GROUP의 경우 결과가 반드시 정렬되지는 않습니다. 대부분의 경우 직관적 인 순서로 나올 수 있지만 GROUP 절에 의해 보장되지는 않습니다. 그룹을 정렬하려면 GROUP BY 뒤에 명시 적으로 ORDER BY를 사용하십시오.
  4. 그룹화 된 데이터는 WHERE 절로 필터링 할 수 없습니다. WHERE 절을 사용하여 주문 데이터를 필터링 할 수 있습니다.