[SQL] 하나 개의 컬럼에 대한 DISTINCT
SQL하나 개의 컬럼에 대한 DISTINCT
하자 내가 다음 쿼리를 말한다.
SELECT ID, Email, ProductName, ProductModel FROM Products
어떻게하면 중복 이메일을 반환하지 않도록 수정할 수 있습니까?
여러 행이 동일한 이메일을 포함 할 때 즉, 나는 결과가 해당 행 (바람직 마지막) 중 하나만 포함 할. 다른 컬럼의 중복은 허용되어야한다.
DISTINCT와 GROUP BY와 같은 조항은 전체 행에 대한 작업에 나타납니다. 아니에요 확신이 접근하는 방법.
해결법
-
==============================
1.당신은 SQL Server 2005 또는 위의 사용을 사용하는 경우이 :
당신은 SQL Server 2005 또는 위의 사용을 사용하는 경우이 :
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1
편집하다: 예 where 절 사용 a :
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%' ) a WHERE rn = 1
-
==============================
2.이는 SQL 서버 2005 +를 가정하고 "마지막으로"당신의 정의는 주어진 이메일 최대 PK입니다
이는 SQL 서버 2005 +를 가정하고 "마지막으로"당신의 정의는 주어진 이메일 최대 PK입니다
WITH CTE AS ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID DESC) AS RowNumber FROM Products ) SELECT ID, Email, ProductName, ProductModel FROM CTE WHERE RowNumber = 1
-
==============================
3.당신은 별개의 행, 열이 아닌로의 DISTINCT 생각을 사용하는 경우. 이 열은 정확히 같은 일치하지 않는 행만 반환됩니다.
당신은 별개의 행, 열이 아닌로의 DISTINCT 생각을 사용하는 경우. 이 열은 정확히 같은 일치하지 않는 행만 반환됩니다.
SELECT DISTINCT ID, Email, ProductName, ProductModel FROM Products ---------------------- 1 | something@something.com | ProductName1 | ProductModel1 2 | something@something.com | ProductName1 | ProductModel1
ID 열에이 다르기 때문에 쿼리는 두 행을 반환합니다. 당신은 나는 이런 식으로 뭔가를 추천 마지막을 반환 할 경우 ID 열이 증가하는 IDENTITY 열 것을 나는 믿고있어 :
SELECT DISTINCT TOP 1 ID, Email, ProductName, ProductModel FROM Products ORDER BY ID DESC
상위 1은 첫번째 마지막 행으로 결과를 반환합니다 하행 ID하여 주문하여, 첫 번째 레코드를 반환합니다. 이렇게하면 마지막 레코드를 제공 할 것입니다.
-
==============================
4.당신은 이상 할 수있는 기능으로 그룹을 사용하여
당신은 이상 할 수있는 기능으로 그룹을 사용하여
SELECT ID, 이메일, 제품 이름, ProductModel 제품의 GROUP BY 이메일
-
==============================
5.액세스의 경우, 여기에 SQL 선택 쿼리 I 선물을 사용할 수 있습니다 :
액세스의 경우, 여기에 SQL 선택 쿼리 I 선물을 사용할 수 있습니다 :
예를 들어, 당신은이 테이블을 가지고 :
888 || T800 아놀드 || t800.arnold@cyberdyne.com
(123) || 존 코너 || s.connor@skynet.com
(125) || 사라 코너 ||s.connor@skynet.com
그리고 당신은 별개의 메일을 선택해야합니다. 당신이 그것을 할 수 있습니다 :
SQL SELECT :
SELECT MAX(p.CLIENTE) AS ID_CLIENTE , (SELECT TOP 1 x.NOMBRES FROM Rep_Pre_Ene_MUESTRA AS x WHERE x.MAIL=p.MAIL AND x.CLIENTE=(SELECT MAX(l.CLIENTE) FROM Rep_Pre_Ene_MUESTRA AS l WHERE x.MAIL=l.MAIL)) AS NOMBRE, p.MAIL FROM Rep_Pre_Ene_MUESTRA AS p GROUP BY p.MAIL;
당신은 최대의 ID를 선택하려면이 사용할 수 있습니다, 그 최대의 ID로 상대의 이름, 당신은 방법 것을 다른 속성을 추가 할 수 있습니다. 그리고 마지막에 당신은 마지막 별개의 열이 당신에게 유일한 그룹을 필터에 별개의 열을 넣어.
이것은 당신에게 기자의 데이터로 최대 ID를 가져올 것이다, 당신은 분이나 다른 기능을 사용할 수 있으며 하위 쿼리에 해당 기능을 복제합니다.
이 선택 의지 반환 :
888 || T800 아놀드 || t800.arnold@cyberdyne.com
(125) || 사라 코너 ||s.connor@skynet.com
색인을 선택한 열을 기억하고 별개의 열은 모두 대문자 또는 소문자에없는 숫자 데이터가 있어야합니다, 그렇지 않으면 작동하지 않습니다. 이뿐만 아니라 하나의 등록 된 메일로 작동합니다. 코딩 해피!
-
==============================
6.전체 행에 작업 BY DISTINCT와 GROUP 그 이유는이 쿼리 반환 전체 행입니다.
전체 행에 작업 BY DISTINCT와 GROUP 그 이유는이 쿼리 반환 전체 행입니다.
쿼리가 반환해야 어떤 손에 의해 작성 시도하고 당신은 비 중복 컬럼에 넣어 무엇을 모호 것을 볼 수 있습니다 : 수 있도록 당신은 이해합니다.
말 그대로 다른 열에 무엇인지 상관하지 않는 경우이를 반환하지 않습니다. 각 전자 메일 주소를 임의의 행을 반환하는 나에게 약간의 쓸모없는 것 같다.
-
==============================
7.이 시도
이 시도
;With Tab AS (SELECT DISTINCT Email FROM Products) SELECT Email,ROW_NUMBER() OVER(ORDER BY Email ASC) AS Id FROM Tab ORDER BY Email ASC
-
==============================
8.이 시도:
이 시도:
SELECT ID, Email, ProductName, ProductModel FROM Products WHERE ID IN (SELECT MAX(ID) FROM Products GROUP BY Email)
from https://stackoverflow.com/questions/5021693/distinct-for-only-one-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 쿼리에서 숫자로 변환 텍스트 (0) | 2020.04.09 |
---|---|
[SQL] 각 행은 쿼리에 의해 반환에 대해 한 번 어떻게 저장 프로 시저를 실행합니까? (0) | 2020.04.09 |
[SQL] 데이터베이스 (1)를 사용하여 한 번에 적 있나요 : 1 개 관계가 의미가? (0) | 2020.04.09 |
[SQL] SQL - 대다 테이블의 기본 키 (0) | 2020.04.09 |
[SQL] 두 날짜 사이의 날짜 범위에서 데이터를 선택합니다 (0) | 2020.04.09 |