0

我正在编写一个查询,该查询将从数据资源管理器模式Posts中获取和Users表,并输出每个用户的第 10 个和第 100 个帖子 ID。输出将是第 10 个或第 100 个帖子 ID 的列,第二列表示该用户的第 10 个或第 100 个帖子。

我很难理解如何从每个用户那里获得第 10 条和第 100 条帖子。我已经开始计算每个用户的帖子数量,但我的查询仍然没有将所有用户 ID 分组在一起。

SELECT u.Id, u.DisplayName, p.Id, COUNT(p.Id) as numPost
FROM Users AS u
LEFT JOIN Posts AS p ON u.Id = p.OwnerUserId
GROUP BY u.Id, u.DisplayName, p.Id

我期待该函数输出每个用户的帖子数量,并查看我是否可以从那里提取第 10 和第 100 个帖子,但我认为我的方向错误。当前查询输出

任何帮助,将不胜感激!

4

1 回答 1

1

我建议使用row_number() over(...)这个:

SELECT
    uid
  , displayname
  , MAX(CASE WHEN rn = 10  THEN pid END) AS pid10
  , MAX(CASE WHEN rn = 100 THEN pid END) AS pid100
FROM (
    SELECT
        u.Id                                                AS uid
      , u.DisplayName
      , p.Id                                                AS pid
      , ROW_NUMBER() OVER (PARTITION BY u.Id ORDER BY p.id) AS rn
    FROM Users AS u
    LEFT JOIN Posts AS p ON u.Id = p.OwnerUserId
    ) AS up
WHERE (
        rn IN (10, 100)
     OR rn IS NULL
      )
GROUP BY
    uid
  , displayname

我假设左加入帖子是因为您希望所有用户返回,如果是这样,请注意OR RN IS NULL任何没有帖子的用户都需要 where 子句。

演示

于 2018-12-30T01:17:04.397 回答