동일한 쿼리에서 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
'programing' 카테고리의 다른 글
iOS 다운로드 및 앱 내부 이미지 저장 (0) | 2023.08.22 |
---|---|
Swift를 사용하여 한 View 컨트롤러에서 다른 View 컨트롤러로 이동하는 방법 (0) | 2023.08.17 |
C++에서 컴파일 타임 문자열을 편리하게 선언합니다. (0) | 2023.08.17 |
JQuery.trigger에서 매개 변수 전달 중 (0) | 2023.08.17 |
jQuery를 사용하여 경로 없이 파일 입력의 선택한 파일 이름 가져오기 (0) | 2023.08.17 |