2017-03-21 4 views
0

StackExchange 데이터 세트에서 결과를 얻는 쿼리가 필요합니다. 최상위 평판을 얻습니다. 각 사용자에 대해 3 개의 게시물 (게시물 본문)이 아닌 사용자 사용자. 표는 다음과 같습니다최고 평판의 3 게시물 선택 시체 Stackexchange-SQL에있는 사용자

사용자 (ID, 평판) 게시물 : (아이디, OwnerUserId, 신체) 나는 다음과 같은 쿼리 작성했습니다

:

SELECT top 100 

ROW_NUMBER() OVER(ORDER BY u.Reputation DESC) AS rank, 

u.Id AS [User Link], u. Reputation, p.Body 

from 
     Users u 
     inner join Posts p on p.OwnerUserId = u.Id 

ORDER BY 
    u.Reputation DESC 

는 모든 게시물을 반환합니다 각 사용자의 3 게시물 (본문) 만 가져 오는 것이 좋습니다. 도와주세요!

+1

는 SO 코드 작성 서비스가 아닙니다. _you_가 검색어를 쓰는 것을 정확히 유지합니까? –

+0

OP가 문제를 직접 풀려고하지 않았기 때문에이 질문을 오프 토픽으로 끝내기로했습니다. –

+0

Dan Bracuk과 Rene Vogt에게 미안합니다. 위의 쿼리를 볼 수 있으므로이 문제를 해결하기 위해 노력하고 있습니다. 다른 쿼리를 많이 시도했지만 문제를 해결할 수 없었습니다. 문제. –

답변

1

당신은 cross apply()을 사용할 수

select 
    u.rank 
, u.Id as [User Link] 
, u.Reputation 
, p.Body 
from (
    select top 100 * 
    , row_number() over (
     order by u.Reputation desc 
    ) as rank 
    from Users u 
    order by u.Reputation desc 
) as u 
cross apply (
    select top 3 
    p.body 
    from Posts p 
    where p.OwnerUserId = u.Id 
) p 
order by u.Reputation desc 

데모 : https://data.stackexchange.com/stackoverflow/revision/645393/805819/

+0

남자 당신은 천사입니다! 니가 내 목숨을 구했어. 그것은 매력처럼 작동합니다. 내가 이해할 수없는 유일한 점은 최상위 사용자가 Robert Harvey, Karl Bielefeldt, Arseni, ...입니다. 그러나이 쿼리는 다른 상위 사용자를 보여줍니다. –

+0

@SaqibIqbal 아마도 stackexchange를 대상으로 사이트를 전환해야 할 것입니다 당신이 선택한 사이트. 당신이 그렇게 할 수있는 쿼리와 결과 사이에 상자가 있습니다. – SqlZim

+0

고마워 ... 대답이 완벽하게 작동합니다. –