[SQL] 어떻게 같은 SELECT 문에서 DISTINCT와 ORDER BY를 사용 하는가?
SQL어떻게 같은 SELECT 문에서 DISTINCT와 ORDER BY를 사용 하는가?
다음 문을 실행 한 후 :
SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC
나는 데이터베이스에서 다음 값을 얻고있다 :
test3
test3
bildung
test4
test3
test2
test1
하지만이 같은 제거 중복을 원하는 :
bildung
test4
test3
test2
test1
나는 DISTINCT를 사용하려고하지만, 하나 개의 문장에 ORDER BY 작동하지 않습니다. 도와주세요.
중대한:
해결법
-
==============================
1.문제는 ORDER BY에 사용 된 열이 DISTINCT에 지정되지 않은 것입니다. 이렇게하려면, 당신은에 정렬 집계 함수를 사용하고 DISTINCT 작업을 만들기 위해 GROUP BY를 사용해야합니다.
문제는 ORDER BY에 사용 된 열이 DISTINCT에 지정되지 않은 것입니다. 이렇게하려면, 당신은에 정렬 집계 함수를 사용하고 DISTINCT 작업을 만들기 위해 GROUP BY를 사용해야합니다.
이 같은 시도 :
SELECT DISTINCT Category, MAX(CreationDate) FROM MonitoringJob GROUP BY Category ORDER BY MAX(CreationDate) DESC, Category
-
==============================
2.싶은 것은 일을하지 않는 이유 때문에 첫 번째 쿼리 (간체)되고, SQL에서 작업의 논리적 인 순서이다 :
싶은 것은 일을하지 않는 이유 때문에 첫 번째 쿼리 (간체)되고, SQL에서 작업의 논리적 인 순서이다 :
그래서, SQL 표준 덕분에 그것이 일시적 장면 뒤에 추가되고 있기 때문에, SELECT 절에없는 무언가에 의해 주문 완전히 가능하다 정렬 키 열 기능을 확장했다.
우리는 DISTINCT 작업을 추가하면 SELECT와 ORDER BY 사이에 추가 될 것이다 :
결과가 더 이상 동일하지 않게하지만 지금은 확장 된 분류 키 열에서 CreationDate과 함께 DISTINCT 작업의 의미가 변경되었습니다. 이것은 우리가, 그래서 SQL 표준을 모두 원하는 것을하지 않고, 모든 합리적인 데이터베이스는 이러한 사용을 금지하고 있습니다.
다음과 같이 표준 구문을 에뮬레이트 할 수 있습니다
SELECT Category FROM ( SELECT Category, MAX(CreationDate) AS CreationDate FROM MonitoringJob GROUP BY Category ) t ORDER BY CreationDate DESC
또는 단순히 (이 경우), Prutswonder에 의해도 같이
SELECT Category, MAX(CreationDate) AS CreationDate FROM MonitoringJob GROUP BY Category ORDER BY CreationDate DESC
좀 더 자세히 여기에 SQL DISTINCT와 ORDER BY에 대해 블로그에 있습니다.
-
==============================
3.원래의 질문의 예처럼 - - MAX (에서 CreationDate)의 출력이 원하지 않는 경우 유일한 대답은 Prashant 굽타의 대답의 두 번째 문입니다 :
원래의 질문의 예처럼 - - MAX (에서 CreationDate)의 출력이 원하지 않는 경우 유일한 대답은 Prashant 굽타의 대답의 두 번째 문입니다 :
SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
설명 : Prutswonder의 대답에 문이이 경우에 쓸모없는 있도록, 인라인 함수에서 ORDER BY 절을 사용할 수 없습니다, 당신은 외부가 주위에 선택 넣고 MAX (에서 CreationDate) 부분을 폐기 할 수 없다.
-
==============================
4.당신은 [분류]의 값과 [에서 CreationDate] 열을 원하는 경우에 다만,이 코드를 사용
당신은 [분류]의 값과 [에서 CreationDate] 열을 원하는 경우에 다만,이 코드를 사용
SELECT [Category], MAX([CreationDate]) FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
당신은 [분류] 컬럼의 값을 원하는 경우 또는이 코드를 사용합니다.
SELECT [Category] FROM [MonitoringJob] GROUP BY [Category] ORDER BY MAX([CreationDate]) DESC
혹시 당신이 원하는 모든 별개의 기록을해야합니다.
-
==============================
5.원래 결과는 "TEST3는"복수의 결과를 한 것으로 나타났다 ...
원래 결과는 "TEST3는"복수의 결과를 한 것으로 나타났다 ...
이 그룹으로의에서 중복을 제거하기 위해 MAX 모든 시간을 사용하기 시작 ... 그리고 잊지 또는 기본 질문이 무엇인지 무시하는 것은 매우 쉽습니다 ...
영업 이익은 아마도 사용하여 MAX가 그에게주는 것을 깨달았다 마지막으로 "창조"와 MIN을 사용하여 "창조"첫 줄 것이다 ...
-
==============================
6.
if object_id ('tempdb..#tempreport') is not null begin drop table #tempreport end create table #tempreport ( Category nvarchar(510), CreationDate smallint ) insert into #tempreport select distinct Category from MonitoringJob (nolock) select * from #tempreport ORDER BY CreationDate DESC
-
==============================
7.하위 쿼리함으로써 작동합니다 :
하위 쿼리함으로써 작동합니다 :
SELECT distinct(Category) from MonitoringJob where Category in(select Category from MonitoringJob order by CreationDate desc);
-
==============================
8.오름차순으로 고유의 뜻 정렬 기록합니다. 당신은 내림차순 순서 사용 정렬 할 경우 :
오름차순으로 고유의 뜻 정렬 기록합니다. 당신은 내림차순 순서 사용 정렬 할 경우 :
SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category DESC
당신이에서 CreationDate의 필드를 기준으로 정렬 기록하려는 경우,이 필드는 선택 문에 있어야합니다 :
SELECT DISTINCT Category, creationDate FROM MonitoringJob ORDER BY CreationDate DESC
-
==============================
9.당신은 CTE를 사용할 수 있습니다 :
당신은 CTE를 사용할 수 있습니다 :
WITH DistinctMonitoringJob AS ( SELECT DISTINCT Category Distinct_Category FROM MonitoringJob ) SELECT Distinct_Category FROM DistinctMonitoringJob ORDER BY Distinct_Category DESC
-
==============================
10.다음 시도하지만 거대한 데이터에 대한 유용한 아니다 ...
다음 시도하지만 거대한 데이터에 대한 유용한 아니다 ...
SELECT DISTINCT Cat FROM ( SELECT Category as Cat FROM MonitoringJob ORDER BY CreationDate DESC );
-
==============================
11.그것은이처럼 내부 쿼리를 사용하여 수행 할 수 있습니다
그것은이처럼 내부 쿼리를 사용하여 수행 할 수 있습니다
$query = "SELECT * FROM (SELECT Category FROM currency_rates ORDER BY id DESC) as rows GROUP BY currency";
-
==============================
12.
SELECT DISTINCT Category FROM MonitoringJob ORDER BY Category ASC
from https://stackoverflow.com/questions/5391564/how-to-use-distinct-and-order-by-in-same-select-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] INSERT ... ON DUPLICATE KEY (아무것도하지 않고) (0) | 2020.04.09 |
---|---|
[SQL] 이 SQL 문에 대한 실행 순서는 무엇인가 (0) | 2020.04.09 |
[SQL] SQL 문은 전날 모든 행을 선택합니다 (0) | 2020.04.09 |
[SQL] 찾을 수 없습니다 저장 프로 시저 'dbo.aspnet_CheckSchemaVersion' (0) | 2020.04.09 |
[SQL] 무엇 '다중 부분 식별자'이며 왜이 바인딩 할 수 없습니다? (0) | 2020.04.09 |