0

我需要一个查询来从 StackExchange 数据集获取结果,以这样的方式返回 100 个顶级信誉用户,每个用户的帖子(帖子正文)不超过 3 个。表格是这样的:

用户:(id,信誉)帖子:(id,OwnerUserId,body)

我写了以下查询:

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 个帖子(正文)。请帮忙!

4

1 回答 1

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/

于 2017-03-21T12:20:24.063 回答