programing

동일한 쿼리에서 DISTINCT 및 TOP 사용

stoneblock 2023. 8. 17. 20:36

동일한 쿼리에서 DISTINCT 및 TOP 사용

사용하고 싶습니다.DISTINCT그리고.TOP같은 질문에.나는 노력했다.

SELECT DISTINCT TOP 10 * FROM TableA

하지만 아직 사본이 남아 있습니다personID그래서 나는 해야겠다고 생각했습니다:

SELECT DISTINCT (personID) TOP 10 * FROM TableA

하지만 여기서는 구문이 틀립니다.어떻게 하면 정확하게 할 수 있을까요?

사용 중입니다.SELECT *모든 기록을 끌어모으고 있습니다.참 DISTINCT를 사용하려면 고유한 값을 받을 열만 나열합니다.여러 개의 열이 있는 경우 결합된 모든 열이 하나의 고유한 레코드를 구성합니다.

SELECT distinct TOP 10 personID 
FROM TableA

참고: 다음을 제외하고,ORDER BY이렇게 하면 처음 10개의 레코드가 특별한 순서 없이 반환됩니다.쿼리를 실행할 때마다 결과가 다를 수 있습니다.

당신은 다른 사람들을 위한 10개의 무작위 기록을 원하는 것 같습니다.사용해 보십시오.

select t.*
from (select t.*,
             row_number() over (partition by personid order by (select NULL)) as seqnum
      from t
     ) t
where seqnum = 1

그러나 일반적으로 사용할 때top당신은 또한 사용해야 합니다.order by"top"의 의미를 지정합니다.

다음과 같은 쿼리를 사용하면 쉽게 작동합니다.

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

위의 질문에서,name열n_name 및[ATTENDANCE]는 table_name입니다.

사용할 수도 있습니다.WHERE필터링 조건을 만들기 위해 이를 사용합니다.

표에서 고유한 개인 ID를 선택합니다. 샘플 10

이것은 데이터 간에 작동합니다.

이렇게 할 수도 있습니다.

SELECT TOP 10 t.* FROM (SELECT distinct personID FROM TableA) t

몇 가지 옵션:

1: 상위 10명 선택ID 시작(식별자 선택)표 A의 ID)

2:;cteas(별명 사용자 선택)표 A의 ID) 상위 10명 선택아이디 fromct

3: ; cte as (SELECT person)ID,row_count=row_number() over(사용자별로 표시됨)개인별ID주문ID) 표 A) 상위 10명 선택ID Fromcte 여기서 row_count=1

오래된 질문이지만 좀 더 우아한 해결책을 제안할 수 있습니다.

SELECT personDetails.*
FROM
(
    SELECT      TOP (10)
                personID
                personID
    FROM        TableA
    GROUP BY    personID    --> use this instead of distinct
)   AS          distinctIds

OUTER APPLY
(
    SELECT  TOP (1) *       --> fetch only one result matching personID
    FROM    TableA
    WHERE   TableA.personId = distinctIds.personID
)   AS      personDetails

DISTINCT 대신 GROUP BY를 사용할 수 있으며 TOP(1)과 함께 OUTER APPLY를 사용하여 일치하는 결과를 하나만 가져올 수 있습니다.

게시물 제목을 기준으로 매트 부쉬의 답변이 정확합니다.
하지만 코드 예제에서 알 수 있듯이 문제가 상위 10명의 모든 레코드 필드를 갖는 것입니다.ID, 하위 쿼리로 사용할 수 있습니다.

SELECT TableA.* 
FROM TableA
INNER JOIN (SELECT DISTINCT TOP 10 personID FROM TableA) AS B
ON TableA.ID = B.ID

SELECT DISTINCT ta.personid FROM (SELECT TOP 10 * FROM TableA) ta

ta는 하위 쿼리의 객체이며 ta 객체를 사용하여 값을 구별할 수 있습니다.

내가 고쳤어요.

select distinct  personid from (SELECT  TOP 10 * FROM TableA)

모든 사용자의 상위 1개 레코드를 선택하는 것이 목표인 경우ID를 사용합니다.

select * from TableA group by personid

그룹화 기준을 수행 중이므로 모든 열이 반환되지만 personId가 동일한 추가 행은 무시됩니다(표시되지 않음).

언급URL : https://stackoverflow.com/questions/15479224/using-distinct-and-top-in-the-same-query