복붙노트

[SQL] GROUP BY와 DISTINCT 사이에 어떤 차이가 있나요

SQL

GROUP BY와 DISTINCT 사이에 어떤 차이가 있나요

나는 SQL 다른 일에 대해 뭔가 간단하게 배웠습니다 :

SELECT c FROM myTbl GROUP BY C

같은 결과를 가지고 :

SELECT DISTINCT C FROM myTbl

내가의 호기심,은 SQL 엔진이 명령을 처리하는 방법이 아무것도 다른입니다, 또는 그들이 진정으로 똑같은입니까?

나는 개인적으로 별개의 구문을 선호하지만, 나는 확실히 그것을 다른 어떤 것보다 습관 중 더입니다.

편집 : 이것은 골재에 대한 질문이 없습니다. 집계 함수와 GROUP BY의 사용은 이해된다.

해결법

  1. ==============================

    1.MusiGenesis '반응은 기능적으로 언급 한 바와 같이 귀하의 질문에 관련하여 올바른이다; 은 SQL Server 스마트 충분히 당신이 "그룹으로"를 사용하고 집계 함수를 사용하지 않는 경우, 다음 "고유"당신이 실제로 무엇을 의미하는지는 것을 깨닫게하는 것입니다 - 당신은 단순히 "고유 사용하는 것처럼 따라서는 실행 계획을 생성 . "

    MusiGenesis '반응은 기능적으로 언급 한 바와 같이 귀하의 질문에 관련하여 올바른이다; 은 SQL Server 스마트 충분히 당신이 "그룹으로"를 사용하고 집계 함수를 사용하지 않는 경우, 다음 "고유"당신이 실제로 무엇을 의미하는지는 것을 깨닫게하는 것입니다 - 당신은 단순히 "고유 사용하는 것처럼 따라서는 실행 계획을 생성 . "

    당신이주의하지 않으면 라인까지 악성 개는 발생할 수 있습니다 "고유" "그룹으로"와 건방진 치료 - 그러나, 나는 잘으로 행크의 반응을주의하는 것이 중요하다고 생각합니다. 그것은 당신이 집계와 함께 사용하기위한 것 중 하나가 아닌 중 하나는 두 개의 SQL 쿼리 키워드 사이의 기능적 차이에 대해 요구하고 있기 때문에이 "집계에 대한 없습니다 질문"이라고 말을 완전히 정확하지 않습니다.

    귀찮게 왜, 드라이버 편리한 가지고있는 경우에 망치 가끔 나사에서 운전하기 위해 노력하지만, 할 수 있습니까?

    (이 비유의 목적을 위해, 해머 : 스크루 드라이버 : GROUPBY : 테이블 열에서 고유 한 값의 고유 및 나사 => GET 목록)

  2. ==============================

    2.GROUP BY는 AVG, MAX, MIN, SUM 및 COUNT와 같은 집계 함수를 사용할 수 있습니다. 반면에 DISTINCT는 중복을 제거합니다.

    GROUP BY는 AVG, MAX, MIN, SUM 및 COUNT와 같은 집계 함수를 사용할 수 있습니다. 반면에 DISTINCT는 중복을 제거합니다.

    예를 들어, 구매 기록의 무리가 있고, 당신은 당신이 좋아하는 일을 할 수있는 각 부서에서 지출 얼마나 많은 알고 싶다면 :

    SELECT department, SUM(amount) FROM purchases GROUP BY department
    

    이 부서의 이름과 해당 부서의 모든 행 양의 모든 값의 합계를 포함, 당신이 부서 당 하나 개의 행을 줄 것이다.

  3. ==============================

    3.차이 (SQL Server의 적어도)이 없습니다. 두 쿼리는 동일한 실행 계획을 사용합니다.

    차이 (SQL Server의 적어도)이 없습니다. 두 쿼리는 동일한 실행 계획을 사용합니다.

    http://sqlmag.com/database-performance-tuning/distinct-vs-group

    참여 서브 - 쿼리가 있다면 아마 차이가있다 :

    http://blog.sqlauthority.com/2007/03/29/sql-server-difference-between-distinct-and-group-by-distinct-vs-group-by/

    차이 (오라클 스타일)이 없다 :

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212

  4. ==============================

    4.그렇다 DISTINCT는 달리, GROUP BY는 (다른 많은 답변 언급 된) 그룹 당 데이터를 집계을 허용한다는 사실에서, 내 생각에 가장 중요한 차이점은 두 작업은 두 개의 매우 다른 단계에서 "일"사실이다 SELECT 문에서 실행되는 작업의 논리적 인 순서.

    그렇다 DISTINCT는 달리, GROUP BY는 (다른 많은 답변 언급 된) 그룹 당 데이터를 집계을 허용한다는 사실에서, 내 생각에 가장 중요한 차이점은 두 작업은 두 개의 매우 다른 단계에서 "일"사실이다 SELECT 문에서 실행되는 작업의 논리적 인 순서.

    여기에 가장 중요한 작업은 다음과 같습니다 :

    당신이 볼 수 있듯이, 각 작업의 논리적 순서는 그것으로 무엇을 할 수 있는지에 영향을 그리고 후속 작업에 영향을 미치는 방법에 대해 설명합니다. 특히, 사실은 GROUP BY 조작 수단 그 SELECT 작업 (투사) "전에 발생"고 :

    당신이 고유 한 값에 계산 창 기능을 원하는 경우 투사에 따라하지 예는 유용하다 :

    SELECT rating, row_number() OVER (ORDER BY rating) AS rn
    FROM film
    GROUP BY rating
    

    Sakila 데이터베이스에 대해 실행하면,이 수율 :

    rating   rn
    -----------
    G        1
    NC-17    2
    PG       3
    PG-13    4
    R        5
    

    같은 쉽게 DISTINCT 달성 할 수 없습니다

    SELECT DISTINCT rating, row_number() OVER (ORDER BY rating) AS rn
    FROM film
    

    즉, 쿼리는 "잘못"과 같은 것을 얻을 수 :

    rating   rn
    ------------
    G        1
    G        2
    G        3
    ...
    G        178
    NC-17    179
    NC-17    180
    ...
    

    이것은 우리가 원하는 것이 아니다. 윈도우 함수가 이미 계산 예상했기 때문에 우리는 더 이상 DISTINCT 등급을 제거 할 수 있도록 DISTINCT 작업은 투사 "후 발생". DISTINCT 사용하기 위해, 우리는 둥지해야 할 것이다 쿼리의 일부가 :

    SELECT rating, row_number() OVER (ORDER BY rating) AS rn
    FROM (
      SELECT DISTINCT rating FROM film
    ) f
    

    사이드 참고 :이 특별한 경우에, 우리는 또한 DENSE_RANK를 사용할 수있다 ()

    SELECT DISTINCT rating, dense_rank() OVER (ORDER BY rating) AS rn
    FROM film
    

    SQL의 단점 중 하나는 시간에 그 상세이다. 우리가 전에 보았던 것과 같은 이유 (작업 즉 논리적 순서)을 위해, 우리는 "쉽게"무언가에 의해 그룹은 우리에 투사 할 수 없다.

    무효 인 SQL이다 :

    SELECT first_name || ' ' || last_name AS name
    FROM customer
    GROUP BY name
    

    이것은 (표현을 반복) 유효

    SELECT first_name || ' ' || last_name AS name
    FROM customer
    GROUP BY first_name || ' ' || last_name
    

    이것은 유효도 (식 중첩)

    SELECT name
    FROM (
      SELECT first_name || ' ' || last_name AS name
      FROM customer
    ) c
    GROUP BY name
    

    나는 블로그 포스트에서 더 깊이에서이 주제에 대해 서면으로 작성했습니다

  5. ==============================

    5.그냥 중복을 제거하려면 DISTINCT 사용합니다. 당신이 집계 사업자 (MAX, SUM, GROUP_CONCAT, ..., 또는 HAVING 절)을 적용 할 경우에 의해 GROUP 사용.

    그냥 중복을 제거하려면 DISTINCT 사용합니다. 당신이 집계 사업자 (MAX, SUM, GROUP_CONCAT, ..., 또는 HAVING 절)을 적용 할 경우에 의해 GROUP 사용.

  6. ==============================

    6.나는 그들의 실행에 미묘한 차이에 대한 가능성이 예상된다. 나는 오라클 10g에서이 라인을 따라 두 가지 기능이 동일한 쿼리에 대한 실행 계획을 확인 :

    나는 그들의 실행에 미묘한 차이에 대한 가능성이 예상된다. 나는 오라클 10g에서이 라인을 따라 두 가지 기능이 동일한 쿼리에 대한 실행 계획을 확인 :

    core> select sta from zip group by sta;
    
    ---------------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |    58 |   174 |    44  (19)| 00:00:01 |
    |   1 |  HASH GROUP BY     |      |    58 |   174 |    44  (19)| 00:00:01 |
    |   2 |   TABLE ACCESS FULL| ZIP  | 42303 |   123K|    38   (6)| 00:00:01 |
    ---------------------------------------------------------------------------
    
    core> select distinct sta from zip;
    
    ---------------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |    58 |   174 |    44  (19)| 00:00:01 |
    |   1 |  HASH UNIQUE       |      |    58 |   174 |    44  (19)| 00:00:01 |
    |   2 |   TABLE ACCESS FULL| ZIP  | 42303 |   123K|    38   (6)| 00:00:01 |
    ---------------------------------------------------------------------------
    

    중간 동작은 약간 다릅니다 : "해시 GROUP BY"대 "HASH UNIQUE"하지만, 예상 비용 등 동일하다. 나는 그 (두 번째 어떤 물리적 캐싱으로 인해 읽는 할 필요가 없습니다 않았다 제외)에 대한 추적과 실제 작업 카운트가 모두 동일했다 이러한 실행.

    하지만 동작 이름이 다르기 때문에, 실행이 다소 다른 코드 경로를 따를 것이라고 생각하고 더 큰 차이의 가능성을 엽니 다.

    나는이 목적을 위해 DISTINCT 구문을 선호한다고 생각합니다. 그것은 더 명확하게 쿼리의 목적을 나타냅니다, 단지 습관이 아니다.

  7. ==============================

    7.당신이 게시 된 쿼리, 그들은 동일합니다. 그러나 다른 쿼리에 대한 진실하지 않을 수 있음을 인정합니다.

    당신이 게시 된 쿼리, 그들은 동일합니다. 그러나 다른 쿼리에 대한 진실하지 않을 수 있음을 인정합니다.

    예를 들어, 동일하지 않습니다로입니다 :

    SELECT C FROM myTbl GROUP BY C, D
    
  8. ==============================

    8.나는 모두에게 위의 의견을 읽을 수 있지만 사람이 그룹에 의해 집계 비트에서 떨어져 고유 사이의 주요 차이점을 지적 보지 않았다.

    나는 모두에게 위의 의견을 읽을 수 있지만 사람이 그룹에 의해 집계 비트에서 떨어져 고유 사이의 주요 차이점을 지적 보지 않았다.

    그룹으로 하나 알고리즘 하나 그들로있는 거 읽기 행을 드 중복 제거 반면 고유 반환 모든 행은 다음을-중복을 해제.

    이것은 서로 다른 결과를 얻을 수 있다는 것을 의미합니다!

    예를 들어, 아래 코드는 다른 결과를 생성합니다 :

    SELECT distinct ROW_NUMBER() OVER (ORDER BY Name), Name FROM NamesTable
    
     SELECT ROW_NUMBER() OVER (ORDER BY Name), Name FROM NamesTable
    GROUP BY Name
    

    테이블의 열 이름이 있으면 어디 하나있는은 다른 사람의 중복 첫 번째 쿼리가 반환하는 두 번째 쿼리가 반환 9 행 반면 10 행입니다.

    그 이유는 나는 그들이 다르게 동작 할 수 있도록 위에 말한!

  9. ==============================

    9.여러 열이 DISTINCT 사용하는 경우, 결과 집합이 GROUP BY 윌로 분류되지 않습니다, 당신은 DISTINCT로 집계 함수를 사용할 수 없습니다.

    여러 열이 DISTINCT 사용하는 경우, 결과 집합이 GROUP BY 윌로 분류되지 않습니다, 당신은 DISTINCT로 집계 함수를 사용할 수 없습니다.

  10. ==============================

    10.그들은 특정 데이터에 해당하는 결과가 일어날 경우에도 다른 의미가있다.

    그들은 특정 데이터에 해당하는 결과가 일어날 경우에도 다른 의미가있다.

  11. ==============================

    11.GROUP BY는 DISTINCT 함수에서 (ㅎ) 구분됩니다 매우 특별한 의미를 갖습니다.

    GROUP BY는 DISTINCT 함수에서 (ㅎ) 구분됩니다 매우 특별한 의미를 갖습니다.

    GROUP BY은 선택된 식을 사용하여 분류 될 수있는 쿼리 결과가 집계 기능은 다음 적용될 수 일으키고, 이들 각 그룹보다는 전체 결과 집합에 작용한다.

    여기에 힘의 도움이 그 예입니다 :

    테이블이 같다고 감안할 때 :

    name
    ------
    barry
    dave
    bill
    dave
    dave
    barry
    john
    

    이 쿼리 :

    SELECT name, count(*) AS count FROM table GROUP BY name;
    

    이 같은 출력을 생성 :

    name    count
    -------------
    barry   2
    dave    3
    bill    1
    john    1
    

    어느 분명히 DISTINCT 사용하여 매우 다르다. 당신이 그룹에 결과를 원하는 경우에 당신은 단지 특정 컬럼의 고유 목록을 원하는 DISTINCT 사용하는 경우, GROUP BY를 사용합니다. 이 데이터베이스를 사용자의 요구에 대한 쿼리를 최적화 할 수있는 기회를 제공 할 것입니다.

  12. ==============================

    12.당신이 DISTINCT 의미 때이 같은 일이 일어날 경우에도, GROUP BY를 사용하지 마십시오. 나는 당신이 쿼리에서 밀리 초를 면도하기 위해 노력하고 있으리라 믿고있어, 나는 개발자 시간은 컴퓨터의 시간보다 더 비싼 크기 순서임을 지적한다.

    당신이 DISTINCT 의미 때이 같은 일이 일어날 경우에도, GROUP BY를 사용하지 마십시오. 나는 당신이 쿼리에서 밀리 초를 면도하기 위해 노력하고 있으리라 믿고있어, 나는 개발자 시간은 컴퓨터의 시간보다 더 비싼 크기 순서임을 지적한다.

  13. ==============================

    13.그런 다음 어떤 집계 함수없이 GROUP BY를 사용하는 경우 내부적으로는이 경우에 GROUP BY 및 DISTINCT 사이에는 차이가 없습니다, DISTINCT로 취급됩니다.

    그런 다음 어떤 집계 함수없이 GROUP BY를 사용하는 경우 내부적으로는이 경우에 GROUP BY 및 DISTINCT 사이에는 차이가 없습니다, DISTINCT로 취급됩니다.

    당신이 DISTINCT 절을 제공하는 경우 GROUP BY의 목적은 통합을 달성하는 것입니다 있기 때문에 더 나은 고유 한 기록을 찾기 위해 그것을 사용할 수 있습니다.

  14. ==============================

    14.에 의해 그룹은 골재 작업에 사용됩니다 - 당신이 열 C로 분류 기지국의 수를 얻을 할 때처럼

    에 의해 그룹은 골재 작업에 사용됩니다 - 당신이 열 C로 분류 기지국의 수를 얻을 할 때처럼

    select C, count(B) from myTbl group by C
    

    당신이 고유 행을 얻을 - 독특한처럼 들리는 것입니다.

    SQL 서버 2005 년, 내가 실행 한 단순한 예에 차이를 최적화 할 수 있습니다 최적화 쿼리 것 같습니다. 몰라하지만 당신이 모든 상황에서 그 믿을 수있는 경우.

  15. ==============================

    15.특정 쿼리에서 차이가 없다. 당신이 어떤 집계 열을 추가한다면, 물론, 당신은에 의해 그룹을 사용해야합니다.

    특정 쿼리에서 차이가 없다. 당신이 어떤 집계 열을 추가한다면, 물론, 당신은에 의해 그룹을 사용해야합니다.

  16. ==============================

    16.는 'SQL 언어'의 관점에서 두 구조는 동일 어느 하나를 선택할 우리 모두가 확인해야하는 '라이프 스타일'선택 사항 중 하나입니다. 좀 더 명시 적으로 (따라서 코드 등을 상속받을 사람에게 더 배려)하지만 그 구조는 GROUP BY 잘못된 선택을 의미하는 것은 아니다는 구별됨 좋은 경우가있다 생각합니다.

    는 'SQL 언어'의 관점에서 두 구조는 동일 어느 하나를 선택할 우리 모두가 확인해야하는 '라이프 스타일'선택 사항 중 하나입니다. 좀 더 명시 적으로 (따라서 코드 등을 상속받을 사람에게 더 배려)하지만 그 구조는 GROUP BY 잘못된 선택을 의미하는 것은 아니다는 구별됨 좋은 경우가있다 생각합니다.

    나는이 'GROUP BY는 집계을위한'잘못된 강조 생각합니다. 민속은 설정 기능 (MAX, MIN, COUNT, 등) 그래서 그들은 이해할 수있는 생략 할 수 있다는 것을 알고 있어야합니다 코더의이 때 의도.

    이상적인 최적화 프로그램은 해당 SQL 구문을 인식하고 항상 따라 최적의 계획을 선택합니다. 선택의 실생활의 SQL 엔진의 경우, 테스트해야합니다 :)

    PS는 예컨대 다른 결과를 생성 할 수있다 SELECT 절에서 DISTINCT 키워드의 위치를 ​​주목 대조:

    SELECT COUNT(DISTINCT C) FROM myTbl;
    
    SELECT DISTINCT COUNT(C) FROM myTbl;
    
  17. ==============================

    17.테라 데이타의 관점에서 :

    테라 데이타의 관점에서 :

    당신은 테라 데이타에서 DISTINCT 또는 GROUP BY를 사용하는 경우보기의 결과 집합 점에서, 그것은 중요하지 않습니다. 대답 세트는 동일합니다.

    성능 관점에서, 그것은하지 동일합니다.

    당신은 DISTINCT 또는 GROUP BY와 함께 문을 실행할 때 테라에 무슨 알아야 할 사항에 미치는 영향 성능을 이해합니다.

    DISTINCT의 경우, 행은 GROUP BY의 경우, 첫 번째 단계에서 사전 집계가 수행되는 동안, 어떤 사전 집계에 일어나는없이 즉시 재분배에만 다음 앰프를 통해 재분배 고유 값은된다.

    GROUP BY가 성능 관점에서 항상 더 나은 것을 지금 생각하지 마십시오. 당신이 많은 다른 값을 가질 때, GROUP BY의 사전 집계 단계는 매우 효율적이지 않습니다. 테라 데이타는 제거 중복에 데이터를 정렬 할 수 있습니다. 이 경우, 즉이 DISTINCT 문을 사용하여 먼저 더 나은 재분배 할 수있다. 많은 중복 값이있는 경우에만, 문 BY 그룹은 중복 제거 단계는 재분배 후 발생 한 번만으로 더 나은 선택은 아마입니다.

    테라 데이타 수단에 의하여 짧은 DISTINCT 대 그룹 :

    GROUP BY -> 많은 중복에 대한 DISTINCT -> 없거나 몇 중복.하지 DISTINCT 사용하는 경우 때때로, 당신은 AMP에 스풀 공간이 부족. 그 이유는 재분배가 즉시 발생하고, 비뚤어하는 앰프는 공간이 부족해질 수 있다는 것입니다.

    이 경우에는 중복 이미 첫 번째 단계에서 제거 할 때, 아마 GROUP BY와 더 나은 기회를 가지고 있고, 적은 데이터는 앰프를 통해 이동합니다.

  18. ==============================

    18.단일 열을 선택하고 있기 때문에 당신은 그것을 알아 차리지하고 있습니다.

    단일 열을 선택하고 있기 때문에 당신은 그것을 알아 차리지하고 있습니다.

    이 개 필드를 선택 시도하고 무슨 일이 일어 나는지.

    그룹으로는 다음과 같이 사용하기위한 것입니다 :

    SELECT name, SUM(transaction) FROM myTbl GROUP BY name
    

    어떤 각 사람에 대한 모든 거래의 합을 보여줄 것입니다.

  19. ==============================

    19.나는 이전 게시물 알고있다. 그러나 나는 모든 것이 잘 근무 두꺼비와 오라클 보고서에서 해당 쿼리를 사용할 때 단지에서 사용하는 그룹이 고유 한 값을 반환하는 쿼리를하였습니다 발생, 나는 좋은 응답 시간을 의미한다. 우리가 두꺼비의 응답 시간을는 11g 오라클 9i의에서 마이그레이션 할 때 우수했지만 reporte에는 5 분 걸렸다 이전 버전을 사용하는 경우 보고서를 완료 35 분쯤 걸렸다.

    나는 이전 게시물 알고있다. 그러나 나는 모든 것이 잘 근무 두꺼비와 오라클 보고서에서 해당 쿼리를 사용할 때 단지에서 사용하는 그룹이 고유 한 값을 반환하는 쿼리를하였습니다 발생, 나는 좋은 응답 시간을 의미한다. 우리가 두꺼비의 응답 시간을는 11g 오라클 9i의에서 마이그레이션 할 때 우수했지만 reporte에는 5 분 걸렸다 이전 버전을 사용하는 경우 보고서를 완료 35 분쯤 걸렸다.

    이 솔루션은에 의해 그룹을 변경했다 및 DISTINCT 사용하고 지금이 보고서는 약 30 초에서 실행됩니다.

    나는이 같은 상황을 가진 사람에 유용 바랍니다.

  20. ==============================

    20.사용의 측면에서, GROUP BY는 계산하려면 해당 행을 그룹화하는 데 사용됩니다. 어떤 계산을하지 않습니다 DISTINCT. 그것은 중복 행을 표시하지 않습니다.

    사용의 측면에서, GROUP BY는 계산하려면 해당 행을 그룹화하는 데 사용됩니다. 어떤 계산을하지 않습니다 DISTINCT. 그것은 중복 행을 표시하지 않습니다.

    내가 중복하지 않고 현재의 데이터를 원한다면 난 항상 DISTINCT 사용.

    나는 망고의 총량을 합산 같은 계산을하고 싶은 경우에, 나는 GROUP BY를 사용합니다

  21. ==============================

    21.난 항상 그것을 이해하는 방법은 별개 사용하는 것은 당신이 당신이 그들을 선택한 순서대로 선택한 모든 필드에 의해 그룹화와 같은 것입니다.

    난 항상 그것을 이해하는 방법은 별개 사용하는 것은 당신이 당신이 그들을 선택한 순서대로 선택한 모든 필드에 의해 그룹화와 같은 것입니다.

    즉 :

    select distinct a, b, c from table;
    

    와 같다:

    select a, b, c from table group by a, b, c
    
  22. ==============================

    22.Funtional 효율은 완전히 다르다. 중복 제외한 전용 "반환 값"을 선택하고자하는 경우 별개의 곁에 그룹보다 더 사용합니다. "그룹 별"(+ 정렬 제거)를 포함하기 때문에, "구별"포함 (삭제)

    Funtional 효율은 완전히 다르다. 중복 제외한 전용 "반환 값"을 선택하고자하는 경우 별개의 곁에 그룹보다 더 사용합니다. "그룹 별"(+ 정렬 제거)를 포함하기 때문에, "구별"포함 (삭제)

  23. ==============================

    23.하이브 (HQL)에 의해 그룹은 전자는 테이블의 모든 필드를 비교할 필요로하지 않기 때문에, 빠른 방법은 별개의 것보다 할 수 있습니다. https://sqlperformance.com/2017/01/t-sql-queries/surprises-assumptions-group-by-distinct를 참조하십시오.

    하이브 (HQL)에 의해 그룹은 전자는 테이블의 모든 필드를 비교할 필요로하지 않기 때문에, 빠른 방법은 별개의 것보다 할 수 있습니다. https://sqlperformance.com/2017/01/t-sql-queries/surprises-assumptions-group-by-distinct를 참조하십시오.

  24. ==============================

    24.때때로 그들은 당신에게 동일한 결과를 줄 수 있지만, 서로 다른 의미 / 경우에 사용하기위한 것입니다. 주요 차이점은 구문이다.

    때때로 그들은 당신에게 동일한 결과를 줄 수 있지만, 서로 다른 의미 / 경우에 사용하기위한 것입니다. 주요 차이점은 구문이다.

    미세 아래의 예를 확인할 수 있습니다. DISTINCT는 값들의 중복 세트를 필터링하는 데 사용된다. (6, CS, 9.1) 및 (1, CS, 5.5)는 두 개의 서로 다른 세트이다. 그래서 DISTINCT는 GROUP BY 지점이 하나의 집합을 표시하기 위해 진행되는 동안 행을 모두 표시 할 것입니다.

     SELECT * FROM student; 
    +------+--------+------+
    | Id   | Branch | CGPA |
    +------+--------+------+
    |    3 | civil  |  7.2 |
    |    2 | mech   |  6.3 |
    |    6 | cs     |  9.1 |
    |    4 | eee    |  8.2 |
    |    1 | cs     |  5.5 |
    +------+--------+------+
    5 rows in set (0.001 sec)
    
    SELECT DISTINCT * FROM student; 
    +------+--------+------+
    | Id   | Branch | CGPA |
    +------+--------+------+
    |    3 | civil  |  7.2 |
    |    2 | mech   |  6.3 |
    |    6 | cs     |  9.1 |
    |    4 | eee    |  8.2 |
    |    1 | cs     |  5.5 |
    +------+--------+------+
    5 rows in set (0.001 sec)
    
    SELECT * FROM student GROUP BY Branch;
    +------+--------+------+
    | Id   | Branch | CGPA |
    +------+--------+------+
    |    3 | civil  |  7.2 |
    |    6 | cs     |  9.1 |
    |    4 | eee    |  8.2 |
    |    2 | mech   |  6.3 |
    +------+--------+------+
    4 rows in set (0.001 sec)
    

    몇 가지 추가 조항이나 조건을 사용하지 않고 DISTINCT 달성에 때때로 GROUP BY 절에 의해 얻을 수있는 결과를 얻을 수 없습니다. 예컨대 위의 경우이다.

    아래처럼 GROUP BY 절에있는 모든 열 이름을 통과해야 DISTINCT와 같은 결과를 얻을 수 있습니다. 그래서 구문 차이를 참조하십시오. 당신은이 경우에 절 BY 사용 GROUP 모든 열 이름에 대한 지식이 있어야합니다.

    SELECT * FROM student GROUP BY Id, Branch, CGPA;
    +------+--------+------+
    | Id   | Branch | CGPA |
    +------+--------+------+
    |    1 | cs     |  5.5 |
    |    2 | mech   |  6.3 |
    |    3 | civil  |  7.2 |
    |    4 | eee    |  8.2 |
    |    6 | cs     |  9.1 |
    +------+--------+------+
    

    또한 나는하지 않습니다 DISTINCT 기본적으로 표시 오름차순으로 결과에 의해 발견 그룹이 있습니다. 그러나 나는 이것에 대해 확실하지 않다. 그것은 현명한 벤더 다를 수있다.

    출처 : https://dbjpanda.me/dbms/languages/sql/sql-syntax-with-examples#group-by

  25. ==============================

    25.테이블의 특정 컬럼에 중복을 제거하기위한 일반적으로 우리는 DISTINCT 사용할 수 있습니다.

    테이블의 특정 컬럼에 중복을 제거하기위한 일반적으로 우리는 DISTINCT 사용할 수 있습니다.

    예 :

    select  specialColumn,sum(specialColumn) from yourTableName group by specialColumn;
    
  26. ==============================

    26.집계 함수의 사용을 제외하여 그룹과 별개의 절 사이의 차이가 더 크게 없습니다. 모두 값을 구분하는 데 사용하지만,에 의해 뷰 그룹의 성능 점에서 경우에하는 것은 더 할 수 있습니다. 서로 다른 키워드를 사용하는 경우, 내부적으로는 실행 계획에서 볼 수 있습니다 정렬 작업을 사용했다.

    집계 함수의 사용을 제외하여 그룹과 별개의 절 사이의 차이가 더 크게 없습니다. 모두 값을 구분하는 데 사용하지만,에 의해 뷰 그룹의 성능 점에서 경우에하는 것은 더 할 수 있습니다. 서로 다른 키워드를 사용하는 경우, 내부적으로는 실행 계획에서 볼 수 있습니다 정렬 작업을 사용했다.

    간단한 예를 들어보십시오

    선언 @tmpresult 테이블 (   아이디 TINYINT )

    @tmpresult에 삽입 5를 선택 연합 (EU)의 모든 2를 선택 연합 (EU)의 모든 (3)을 선택 연합 (EU)의 모든 (4) 선택

    별개의 선택 신분증 @tmpresult에서

  27. from https://stackoverflow.com/questions/164319/is-there-any-difference-between-group-by-and-distinct by cc-by-sa and MIT license