[SQL] GROUP BY와 DISTINCT 사이에 어떤 차이가 있나요
SQLGROUP BY와 DISTINCT 사이에 어떤 차이가 있나요
나는 SQL 다른 일에 대해 뭔가 간단하게 배웠습니다 :
SELECT c FROM myTbl GROUP BY C
같은 결과를 가지고 :
SELECT DISTINCT C FROM myTbl
내가의 호기심,은 SQL 엔진이 명령을 처리하는 방법이 아무것도 다른입니다, 또는 그들이 진정으로 똑같은입니까?
나는 개인적으로 별개의 구문을 선호하지만, 나는 확실히 그것을 다른 어떤 것보다 습관 중 더입니다.
편집 : 이것은 골재에 대한 질문이 없습니다. 집계 함수와 GROUP BY의 사용은 이해된다.
해결법
-
==============================
1.MusiGenesis '반응은 기능적으로 언급 한 바와 같이 귀하의 질문에 관련하여 올바른이다; 은 SQL Server 스마트 충분히 당신이 "그룹으로"를 사용하고 집계 함수를 사용하지 않는 경우, 다음 "고유"당신이 실제로 무엇을 의미하는지는 것을 깨닫게하는 것입니다 - 당신은 단순히 "고유 사용하는 것처럼 따라서는 실행 계획을 생성 . "
MusiGenesis '반응은 기능적으로 언급 한 바와 같이 귀하의 질문에 관련하여 올바른이다; 은 SQL Server 스마트 충분히 당신이 "그룹으로"를 사용하고 집계 함수를 사용하지 않는 경우, 다음 "고유"당신이 실제로 무엇을 의미하는지는 것을 깨닫게하는 것입니다 - 당신은 단순히 "고유 사용하는 것처럼 따라서는 실행 계획을 생성 . "
당신이주의하지 않으면 라인까지 악성 개는 발생할 수 있습니다 "고유" "그룹으로"와 건방진 치료 - 그러나, 나는 잘으로 행크의 반응을주의하는 것이 중요하다고 생각합니다. 그것은 당신이 집계와 함께 사용하기위한 것 중 하나가 아닌 중 하나는 두 개의 SQL 쿼리 키워드 사이의 기능적 차이에 대해 요구하고 있기 때문에이 "집계에 대한 없습니다 질문"이라고 말을 완전히 정확하지 않습니다.
귀찮게 왜, 드라이버 편리한 가지고있는 경우에 망치 가끔 나사에서 운전하기 위해 노력하지만, 할 수 있습니까?
(이 비유의 목적을 위해, 해머 : 스크루 드라이버 : GROUPBY : 테이블 열에서 고유 한 값의 고유 및 나사 => GET 목록)
-
==============================
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.차이 (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.그렇다 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.그냥 중복을 제거하려면 DISTINCT 사용합니다. 당신이 집계 사업자 (MAX, SUM, GROUP_CONCAT, ..., 또는 HAVING 절)을 적용 할 경우에 의해 GROUP 사용.
그냥 중복을 제거하려면 DISTINCT 사용합니다. 당신이 집계 사업자 (MAX, SUM, GROUP_CONCAT, ..., 또는 HAVING 절)을 적용 할 경우에 의해 GROUP 사용.
-
==============================
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.당신이 게시 된 쿼리, 그들은 동일합니다. 그러나 다른 쿼리에 대한 진실하지 않을 수 있음을 인정합니다.
당신이 게시 된 쿼리, 그들은 동일합니다. 그러나 다른 쿼리에 대한 진실하지 않을 수 있음을 인정합니다.
예를 들어, 동일하지 않습니다로입니다 :
SELECT C FROM myTbl GROUP BY C, D
-
==============================
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.여러 열이 DISTINCT 사용하는 경우, 결과 집합이 GROUP BY 윌로 분류되지 않습니다, 당신은 DISTINCT로 집계 함수를 사용할 수 없습니다.
여러 열이 DISTINCT 사용하는 경우, 결과 집합이 GROUP BY 윌로 분류되지 않습니다, 당신은 DISTINCT로 집계 함수를 사용할 수 없습니다.
-
==============================
10.그들은 특정 데이터에 해당하는 결과가 일어날 경우에도 다른 의미가있다.
그들은 특정 데이터에 해당하는 결과가 일어날 경우에도 다른 의미가있다.
-
==============================
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.당신이 DISTINCT 의미 때이 같은 일이 일어날 경우에도, GROUP BY를 사용하지 마십시오. 나는 당신이 쿼리에서 밀리 초를 면도하기 위해 노력하고 있으리라 믿고있어, 나는 개발자 시간은 컴퓨터의 시간보다 더 비싼 크기 순서임을 지적한다.
당신이 DISTINCT 의미 때이 같은 일이 일어날 경우에도, GROUP BY를 사용하지 마십시오. 나는 당신이 쿼리에서 밀리 초를 면도하기 위해 노력하고 있으리라 믿고있어, 나는 개발자 시간은 컴퓨터의 시간보다 더 비싼 크기 순서임을 지적한다.
-
==============================
13.그런 다음 어떤 집계 함수없이 GROUP BY를 사용하는 경우 내부적으로는이 경우에 GROUP BY 및 DISTINCT 사이에는 차이가 없습니다, DISTINCT로 취급됩니다.
그런 다음 어떤 집계 함수없이 GROUP BY를 사용하는 경우 내부적으로는이 경우에 GROUP BY 및 DISTINCT 사이에는 차이가 없습니다, DISTINCT로 취급됩니다.
당신이 DISTINCT 절을 제공하는 경우 GROUP BY의 목적은 통합을 달성하는 것입니다 있기 때문에 더 나은 고유 한 기록을 찾기 위해 그것을 사용할 수 있습니다.
-
==============================
14.에 의해 그룹은 골재 작업에 사용됩니다 - 당신이 열 C로 분류 기지국의 수를 얻을 할 때처럼
에 의해 그룹은 골재 작업에 사용됩니다 - 당신이 열 C로 분류 기지국의 수를 얻을 할 때처럼
select C, count(B) from myTbl group by C
당신이 고유 행을 얻을 - 독특한처럼 들리는 것입니다.
SQL 서버 2005 년, 내가 실행 한 단순한 예에 차이를 최적화 할 수 있습니다 최적화 쿼리 것 같습니다. 몰라하지만 당신이 모든 상황에서 그 믿을 수있는 경우.
-
==============================
15.특정 쿼리에서 차이가 없다. 당신이 어떤 집계 열을 추가한다면, 물론, 당신은에 의해 그룹을 사용해야합니다.
특정 쿼리에서 차이가 없다. 당신이 어떤 집계 열을 추가한다면, 물론, 당신은에 의해 그룹을 사용해야합니다.
-
==============================
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.테라 데이타의 관점에서 :
테라 데이타의 관점에서 :
당신은 테라 데이타에서 DISTINCT 또는 GROUP BY를 사용하는 경우보기의 결과 집합 점에서, 그것은 중요하지 않습니다. 대답 세트는 동일합니다.
성능 관점에서, 그것은하지 동일합니다.
당신은 DISTINCT 또는 GROUP BY와 함께 문을 실행할 때 테라에 무슨 알아야 할 사항에 미치는 영향 성능을 이해합니다.
DISTINCT의 경우, 행은 GROUP BY의 경우, 첫 번째 단계에서 사전 집계가 수행되는 동안, 어떤 사전 집계에 일어나는없이 즉시 재분배에만 다음 앰프를 통해 재분배 고유 값은된다.
GROUP BY가 성능 관점에서 항상 더 나은 것을 지금 생각하지 마십시오. 당신이 많은 다른 값을 가질 때, GROUP BY의 사전 집계 단계는 매우 효율적이지 않습니다. 테라 데이타는 제거 중복에 데이터를 정렬 할 수 있습니다. 이 경우, 즉이 DISTINCT 문을 사용하여 먼저 더 나은 재분배 할 수있다. 많은 중복 값이있는 경우에만, 문 BY 그룹은 중복 제거 단계는 재분배 후 발생 한 번만으로 더 나은 선택은 아마입니다.
테라 데이타 수단에 의하여 짧은 DISTINCT 대 그룹 :
GROUP BY -> 많은 중복에 대한 DISTINCT -> 없거나 몇 중복.하지 DISTINCT 사용하는 경우 때때로, 당신은 AMP에 스풀 공간이 부족. 그 이유는 재분배가 즉시 발생하고, 비뚤어하는 앰프는 공간이 부족해질 수 있다는 것입니다.
이 경우에는 중복 이미 첫 번째 단계에서 제거 할 때, 아마 GROUP BY와 더 나은 기회를 가지고 있고, 적은 데이터는 앰프를 통해 이동합니다.
-
==============================
18.단일 열을 선택하고 있기 때문에 당신은 그것을 알아 차리지하고 있습니다.
단일 열을 선택하고 있기 때문에 당신은 그것을 알아 차리지하고 있습니다.
이 개 필드를 선택 시도하고 무슨 일이 일어 나는지.
그룹으로는 다음과 같이 사용하기위한 것입니다 :
SELECT name, SUM(transaction) FROM myTbl GROUP BY name
어떤 각 사람에 대한 모든 거래의 합을 보여줄 것입니다.
-
==============================
19.나는 이전 게시물 알고있다. 그러나 나는 모든 것이 잘 근무 두꺼비와 오라클 보고서에서 해당 쿼리를 사용할 때 단지에서 사용하는 그룹이 고유 한 값을 반환하는 쿼리를하였습니다 발생, 나는 좋은 응답 시간을 의미한다. 우리가 두꺼비의 응답 시간을는 11g 오라클 9i의에서 마이그레이션 할 때 우수했지만 reporte에는 5 분 걸렸다 이전 버전을 사용하는 경우 보고서를 완료 35 분쯤 걸렸다.
나는 이전 게시물 알고있다. 그러나 나는 모든 것이 잘 근무 두꺼비와 오라클 보고서에서 해당 쿼리를 사용할 때 단지에서 사용하는 그룹이 고유 한 값을 반환하는 쿼리를하였습니다 발생, 나는 좋은 응답 시간을 의미한다. 우리가 두꺼비의 응답 시간을는 11g 오라클 9i의에서 마이그레이션 할 때 우수했지만 reporte에는 5 분 걸렸다 이전 버전을 사용하는 경우 보고서를 완료 35 분쯤 걸렸다.
이 솔루션은에 의해 그룹을 변경했다 및 DISTINCT 사용하고 지금이 보고서는 약 30 초에서 실행됩니다.
나는이 같은 상황을 가진 사람에 유용 바랍니다.
-
==============================
20.사용의 측면에서, GROUP BY는 계산하려면 해당 행을 그룹화하는 데 사용됩니다. 어떤 계산을하지 않습니다 DISTINCT. 그것은 중복 행을 표시하지 않습니다.
사용의 측면에서, GROUP BY는 계산하려면 해당 행을 그룹화하는 데 사용됩니다. 어떤 계산을하지 않습니다 DISTINCT. 그것은 중복 행을 표시하지 않습니다.
내가 중복하지 않고 현재의 데이터를 원한다면 난 항상 DISTINCT 사용.
나는 망고의 총량을 합산 같은 계산을하고 싶은 경우에, 나는 GROUP BY를 사용합니다
-
==============================
21.난 항상 그것을 이해하는 방법은 별개 사용하는 것은 당신이 당신이 그들을 선택한 순서대로 선택한 모든 필드에 의해 그룹화와 같은 것입니다.
난 항상 그것을 이해하는 방법은 별개 사용하는 것은 당신이 당신이 그들을 선택한 순서대로 선택한 모든 필드에 의해 그룹화와 같은 것입니다.
즉 :
select distinct a, b, c from table;
와 같다:
select a, b, c from table group by a, b, c
-
==============================
22.Funtional 효율은 완전히 다르다. 중복 제외한 전용 "반환 값"을 선택하고자하는 경우 별개의 곁에 그룹보다 더 사용합니다. "그룹 별"(+ 정렬 제거)를 포함하기 때문에, "구별"포함 (삭제)
Funtional 효율은 완전히 다르다. 중복 제외한 전용 "반환 값"을 선택하고자하는 경우 별개의 곁에 그룹보다 더 사용합니다. "그룹 별"(+ 정렬 제거)를 포함하기 때문에, "구별"포함 (삭제)
-
==============================
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.때때로 그들은 당신에게 동일한 결과를 줄 수 있지만, 서로 다른 의미 / 경우에 사용하기위한 것입니다. 주요 차이점은 구문이다.
때때로 그들은 당신에게 동일한 결과를 줄 수 있지만, 서로 다른 의미 / 경우에 사용하기위한 것입니다. 주요 차이점은 구문이다.
미세 아래의 예를 확인할 수 있습니다. 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.테이블의 특정 컬럼에 중복을 제거하기위한 일반적으로 우리는 DISTINCT 사용할 수 있습니다.
테이블의 특정 컬럼에 중복을 제거하기위한 일반적으로 우리는 DISTINCT 사용할 수 있습니다.
예 :
select specialColumn,sum(specialColumn) from yourTableName group by specialColumn;
-
==============================
26.집계 함수의 사용을 제외하여 그룹과 별개의 절 사이의 차이가 더 크게 없습니다. 모두 값을 구분하는 데 사용하지만,에 의해 뷰 그룹의 성능 점에서 경우에하는 것은 더 할 수 있습니다. 서로 다른 키워드를 사용하는 경우, 내부적으로는 실행 계획에서 볼 수 있습니다 정렬 작업을 사용했다.
집계 함수의 사용을 제외하여 그룹과 별개의 절 사이의 차이가 더 크게 없습니다. 모두 값을 구분하는 데 사용하지만,에 의해 뷰 그룹의 성능 점에서 경우에하는 것은 더 할 수 있습니다. 서로 다른 키워드를 사용하는 경우, 내부적으로는 실행 계획에서 볼 수 있습니다 정렬 작업을 사용했다.
간단한 예를 들어보십시오
선언 @tmpresult 테이블 ( 아이디 TINYINT )
@tmpresult에 삽입 5를 선택 연합 (EU)의 모든 2를 선택 연합 (EU)의 모든 (3)을 선택 연합 (EU)의 모든 (4) 선택
별개의 선택 신분증 @tmpresult에서
from https://stackoverflow.com/questions/164319/is-there-any-difference-between-group-by-and-distinct by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 테이블에서 n은 임의의 행을 선택 (0) | 2020.03.14 |
---|---|
[SQL] 어떻게 쿼리에 매개 변수를 전달하는 방법? (0) | 2020.03.14 |
[SQL] 테이블의 기본 키에 대한 가장 좋은 방법은 무엇입니까? (0) | 2020.03.14 |
[SQL] 어떻게이 게임 통계 쿼리를 단순화 할 수 있습니까? (0) | 2020.03.14 |
[SQL] 클래스에서 전역 변수를 사용하여 (0) | 2020.03.14 |