Выбор 3 сообщений тела лучших пользователей репутации на Stackexchange-SQL

Выбор 3 сообщений тела лучших пользователей репутации на Stackexchange-SQL

21.03.2017 03:06:28 Просмотров 50 Источник

Мне нужен запрос, чтобы получить результаты из набора данных 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 сообщения (тело) каждого пользователя. Пожалуйста, помогите!

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql#comment72950709_42926672
Так что это не служба написания кода. Что именно удерживает вас от написания запроса?
https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql#comment72950775_42926672
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что ОП не пытался решить проблему сам.
https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql#comment72951042_42926672
Мне жаль, что Дэн Брачук и Рене Фогт, я пытаюсь сам решить эту проблему, как вы можете видеть мой запрос выше (я добавил запрос в вопрос), и я пробовал много разных запросов, но не смог решить проблему.

Ответы - Выбор 3 сообщений тела лучших пользователей репутации на Stackexchange-SQL / Selecting 3 posts bodies of top reputation Users on Stackexchange-SQL

SqlZim

21.03.2017 03:20:24

вы можете использовать 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/

https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql/42927002#comment72952128_42927002
Человек Ты ангел! ты спас мне жизнь. Это работает как шарм. Единственное, чего я не понимаю, это то, что топ-пользователи-это Роберт Харви, Карл Билефельдт, Арсений, ..., но этот запрос показывает мне разных топ-пользователей
https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql/42927002#comment72952239_42927002
@SaqibIqbal вам, вероятно, потребуется переключить сайт на целевой сайт stackexchange по вашему выбору. Существует поле между запросом и результатами, которое позволяет вам сделать это.
https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql/42927002#comment72952459_42927002
Большое спасибо...ваш ответ работает отлично
https://stackoverflow.com/questions/42926672/selecting-3-posts-bodies-of-top-reputation-users-on-stackexchange-sql/42927002#comment72952713_42927002
Да я собираюсь принять этот ответ
Закрыть X