[SQL] SQL / MySQL은 - 별개의 / UNIQUE를 선택하지만, 모든 열을 반환?
SQLSQL / MySQL은 - 별개의 / UNIQUE를 선택하지만, 모든 열을 반환?
SELECT DISTINCT field1, field2, field3, ...... FROM table
나는 다음과 같은 SQL 문을 수행하려고하지만 난이 가능한 모든 열을 반환하려면? 뭔가 같은 :
SELECT DISTINCT field1, * from table
해결법
-
==============================
1.당신은 그룹별로 찾고 :
당신은 그룹별로 찾고 :
select * from table group by field1
가끔 문에 별개로 기록 될 수있다 :
select distinct on field1 * from table
대부분의 플랫폼에서, 그러나 어느 쪽도 위의 의지 작업의 다른 컬럼의 동작은 지정 없기 때문입니다. (즉, 만약 MySQL의 첫 번째 작품, 당신은 무엇을 사용하고 있습니다.)
당신은 별개의 필드를 가져오고 하나의 임의의 행마다 따기에 충실 할 수있다.
일부 플랫폼 (예를 들어, PostgreSQL을, 오라클, T-SQL)에이 윈도우 함수를 사용하여 직접 수행 할 수 있습니다 :
select * from ( select *, row_number() over (partition by field1 order by field2) as row_number from table ) as rows where row_number = 1
기타 (MySQL은, SQLite는)에, 당신은 당신이 그렇게하지 않는 것이 좋습니다 자체 (예)로 전체 테이블을 조인 할 것이다 쓰기 서브 쿼리해야합니다.
-
==============================
2.질문의 말씨에서, 나는 당신이 나와 같은 행에있는 다른 모든 열 값을 가지고 주어진 필드에 대한 각각의 같은 값에 대한 고유 한 값을 선택합니다 이해합니다. 결과가 결정되지 않기 때문에 대부분의 DBMS는,도 DISTINCT 나 GROUP BY 이것을 허용하지 않습니다.
질문의 말씨에서, 나는 당신이 나와 같은 행에있는 다른 모든 열 값을 가지고 주어진 필드에 대한 각각의 같은 값에 대한 고유 한 값을 선택합니다 이해합니다. 결과가 결정되지 않기 때문에 대부분의 DBMS는,도 DISTINCT 나 GROUP BY 이것을 허용하지 않습니다.
이런 식으로 생각 : 당신의 필드 1 번 이상 발생하는 경우 표시됩니다 FIELD2의 어떤 값을 (당신이 두 행하지만 두 행에 FIELD2의 두 가지 값 필드 1에 대해 동일한 값을 가지고 주어진).
당신은 그러나 및 DISTINCT 대신 GROUP BY를 사용 (모든 당신이 표시하려는 필드에 대해 명시 적으로) 집계 함수를 사용할 수 있습니다 :
SELECT field1, MAX(field2), COUNT(field3), SUM(field4), .... FROM table GROUP BY field1
-
==============================
3.내가 제대로 문제를 이해하면, 난 그냥했다 것과 유사합니다. 당신은 오히려 모든 데이터에 적용보다, 지정된 필드 수 제한을 DISTINCT의 유용성을 원한다.
내가 제대로 문제를 이해하면, 난 그냥했다 것과 유사합니다. 당신은 오히려 모든 데이터에 적용보다, 지정된 필드 수 제한을 DISTINCT의 유용성을 원한다.
혹시 당신을 필드하는 집계 함수없이 GROUP BY를 사용하는 경우 GROUP BY 출원 당신의 DISTINCT 될 것입니다.
경우에 당신은 당신의 쿼리를 만들 :
SELECT * from table GROUP BY field1;
이 필드 1의 단일 인스턴스를 기반으로 모든 결과를 표시합니다.
예를 들어, 이름, 주소, 도시와 테이블이있는 경우. 한 사람이 기록 된 여러 개의 주소를 가지고 있지만, 당신은 다음과 같은 사람을위한 하나의 주소, 당신은 조회 할 수 있습니다합니다 :
SELECT * FROM persons GROUP BY name;
결과는 그 이름의 하나의 인스턴스 만이 그 주소로 표시되고, 다른 하나가 결과 테이블에서 생략 될 것이라는 것이다. 주의 : fileds는 firstName을 원자 값이있는 경우, 당신은 모두 그룹에 원하는 성.
SELECT * FROM persons GROUP BY lastName, firstName;
두 사람이 lastName하여 동일한 마지막 이름과 그룹 만이있는 경우, 그 사람의 하나가 결과에서 생략되기 때문. 당신은 고려 사항으로 그 일을 계속해야합니다. 도움이 되었기를 바랍니다.
-
==============================
4.
SELECT c2.field1 , field2 FROM (SELECT DISTINCT field1 FROM dbo.TABLE AS C ) AS c1 JOIN dbo.TABLE AS c2 ON c1.field1 = c2.field1
-
==============================
5.그건 정말 좋은 질문입니다. 난 이미 여기에 몇 가지 유용한 답변을 읽고, 그러나 아마 나는 더 정확한 설명을 추가 할 수 있습니다.
그건 정말 좋은 질문입니다. 난 이미 여기에 몇 가지 유용한 답변을 읽고, 그러나 아마 나는 더 정확한 설명을 추가 할 수 있습니다.
GROUP BY 문으로 쿼리 결과의 수를 줄이면만큼 당신이 쿼리 추가 정보를하지 않는 쉽다. 하자가 다음과 같은 테이블의 위치를 '가지고 가정합니다.
--country-- --city-- France Lyon Poland Krakow France Paris France Marseille Italy Milano
이제 쿼리
SELECT country FROM locations GROUP BY country
에서 발생합니다 :
--country-- France Poland Italy
그러나 다음 쿼리
SELECT country, city FROM locations GROUP BY country
..., MS SQL에서 에러가 발생하기 때문에 어떻게 할 수는 "프랑스"의 오른쪽에있는 필드에 읽고 싶은 세 가지 프랑스어 도시 "리옹", "파리"또는 "마르세유"의 컴퓨터 알아?
두 번째 쿼리를 해결하기 위해이 정보를 추가해야합니다. 이렇게하는 한 가지 방법은 모든 후보 중에서 가장 큰 또는 작은 값을 선택하는 기능 MAX () 나 MIN ()를 사용하는 것입니다. MAX ()와 MIN ()는 단지 숫자 값에 적용 할뿐만 아니라, 문자열 값의 알파벳 순서를 비교합니다.
SELECT country, MAX(city) FROM locations GROUP BY country
에서 발생합니다 :
--country-- --city-- France Paris Poland Krakow Italy Milano
또는:
SELECT country, MIN(city) FROM locations GROUP BY country
에서 발생합니다 :
--country-- --city-- France Lyon Poland Krakow Italy Milano
이러한 기능은 당신이 알파벳 (또는 숫자) 순서의 끝 중 하나에서 값을 선택 괜찮만큼 좋은 솔루션입니다. 그러나이 경우 것은 사실이 아니다? 우리는 당신이 특정 특성, 예를 들어,와 값이 필요하다고 가정 해 보자 문자 'M'으로 시작. 지금은 일이 복잡해진다.
지금까지 찾을 수있는 유일한 해결책은 서브 쿼리로 전체 쿼리를 넣어, 손에 의해 그것의 추가 열 외부를 구성하는 것입니다 :
SELECT countrylist.*, (SELECT TOP 1 city FROM locations WHERE country = countrylist.country AND city like 'M%' ) FROM (SELECT country FROM locations GROUP BY country) countrylist
에서 발생합니다 :
--country-- --city-- France Marseille Poland NULL Italy Milano
-
==============================
6.시험
시험
SELECT table.* FROM table WHERE otherField = 'otherValue' GROUP BY table.fieldWantedToBeDistinct limit x
-
==============================
7.위대한 질문 @aryaxt - 당신이 5 년 전에 물어 내가 답을 찾기 위해 노력하고 오늘 우연히 때문에 당신이 좋은 질문을했다 말할 수 있습니다!
위대한 질문 @aryaxt - 당신이 5 년 전에 물어 내가 답을 찾기 위해 노력하고 오늘 우연히 때문에 당신이 좋은 질문을했다 말할 수 있습니다!
난 그냥이 포함되도록 허용 대답을 편집했지만, 경우에 내 편집에서 그것을하지 않습니다 :
테이블가 큰, 그리고 가정이 아니었다 경우 기본 키는이 같은 일을 할 수있는 정수 자동이-증가했다 :
SELECT table.* FROM table --be able to take out dupes later LEFT JOIN ( SELECT field, MAX(id) as id FROM table GROUP BY field ) as noDupes on noDupes.id = table.id WHERE //this will result in only the last instance being seen noDupes.id is not NULL
-
==============================
8.당신은 WITH 절을 그것을 할 수 있습니다.
당신은 WITH 절을 그것을 할 수 있습니다.
예를 들면 :
WITH c AS (SELECT DISTINCT a, b, c FROM tableName) SELECT * FROM tableName r, c WHERE c.rowid=r.rowid AND c.a=r.a AND c.b=r.b AND c.c=r.c
이것은 또한 당신이 WITH 절 쿼리에서 선택한 행만을 선택할 수 있습니다.
-
==============================
9.SQL Server의 경우는 지정된 컬럼에 중복 값을 가진 모든 행과 열을 얻을 수있는 DENSE_RANK 및 추가 윈도우 기능을 사용할 수 있습니다. 다음은 그 예이다 ..
SQL Server의 경우는 지정된 컬럼에 중복 값을 가진 모든 행과 열을 얻을 수있는 DENSE_RANK 및 추가 윈도우 기능을 사용할 수 있습니다. 다음은 그 예이다 ..
with t as ( select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r1' union all select col1 = 'c', col2 = 'b', col3 = 'a', other = 'r2' union all select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r3' union all select col1 = 'a', col2 = 'b', col3 = 'c', other = 'r4' union all select col1 = 'c', col2 = 'b', col3 = 'a', other = 'r5' union all select col1 = 'a', col2 = 'a', col3 = 'a', other = 'r6' ), tdr as ( select *, total_dr_rows = count(*) over(partition by dr) from ( select *, dr = dense_rank() over(order by col1, col2, col3), dr_rn = row_number() over(partition by col1, col2, col3 order by other) from t ) x ) select * from tdr where total_dr_rows > 1
이것은 COL1, COL2, COL3 및 각각 별개의 조합에 대해 행 수를 취하고있다.
-
==============================
10.
SELECT * FROM tblname GROUP BY duplicate_values ORDER BY ex.VISITED_ON DESC LIMIT 0 , 30
난 그냥 여기 예를 뒀다 순서로, 당신은 또한이에 ID 필드를 추가 할 수 있습니다
-
==============================
11.
select min(table.id), table.column1 from table group by table.column1
-
==============================
12.당신이 중복 검사 할 필드에 GROUP BY 추가 당신의 쿼리처럼 보일 수 있습니다
당신이 중복 검사 할 필드에 GROUP BY 추가 당신의 쿼리처럼 보일 수 있습니다
SELECT field1, field2, field3, ...... FROM table GROUP BY field1
필드 1은 중복 레코드를 제외 확인됩니다
또는 당신은 같은 쿼리 수
SELECT * FROM table GROUP BY field1
필드 1의 중복 레코드가 SELECT에서 제외됩니다
-
==============================
13.그냥 GROUP BY 절에 모든 필드를 포함한다.
그냥 GROUP BY 절에 모든 필드를 포함한다.
-
==============================
14.그것은 내부 쿼리하여 수행 할 수 있습니다
그것은 내부 쿼리하여 수행 할 수 있습니다
$query = "SELECT * FROM (SELECT field FROM table ORDER BY id DESC) as rows GROUP BY field";
-
==============================
15.
SELECT * from table where field in (SELECT distinct field from table)
-
==============================
16.세 열의 값이 테이블에 고유 한 경우 SELECT DISTINCT FIELD1, FIELD2는 TABLE1 FROM FIELD3 작동합니다.
세 열의 값이 테이블에 고유 한 경우 SELECT DISTINCT FIELD1, FIELD2는 TABLE1 FROM FIELD3 작동합니다.
예를 들어, 당신은 이름에 대한 여러 개의 동일한 값을 가지고 있지만, 선택된 컬럼의 마지막 이름과 기타 정보가 다른 경우, 기록은 결과 집합에 포함됩니다.
-
==============================
17.내가 사용하는 것이 좋습니다 것입니다
내가 사용하는 것이 좋습니다 것입니다
SELECT * from table where field1 in ( select distinct field1 from table )
당신이 여러 행에 걸쳐 필드 1의 값이 동일한 경우이 방법은 모든 레코드가 반환됩니다.
from https://stackoverflow.com/questions/6127338/sql-mysql-select-distinct-unique-but-return-all-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 합니까 PostgreSQL을 지원 "악센트를 구분"정렬? (0) | 2020.03.14 |
---|---|
[SQL] 오라클과 페이징 (0) | 2020.03.14 |
[SQL] SQL Server 테이블에서 n은 임의의 행을 선택 (0) | 2020.03.14 |
[SQL] 어떻게 쿼리에 매개 변수를 전달하는 방법? (0) | 2020.03.14 |
[SQL] GROUP BY와 DISTINCT 사이에 어떤 차이가 있나요 (0) | 2020.03.14 |