查询来自用户的 returns 第 10 个和第 100 个 post id - data explorer
Query that returns the 10th and 100th post id from a user - data explorer
我正在编写一个查询,它将接收 data explorer schema 中的 Posts
和 Users
表,并输出每个用户的第 10 个和第 100 个 post id。输出将是第 10 个或第 100 个 post id 的列和第二列,说明它是来自该用户的第 10 个还是第 100 个 post。
我无法思考如何从每个用户那里获得第 10 个和第 100 个 post。我已经开始计算每个用户的 post 数量,但我的查询仍然没有将所有用户 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
我期待函数输出每个用户的 post 数量,看看我是否可以从那里提取第 10 个和第 100 个 post,但我想我会在错的方向。 Current query output
如有任何帮助,我们将不胜感激!
我建议为此使用 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
我假设左侧加入帖子是因为您希望返回所有用户,如果是这样,请注意没有帖子的任何用户都需要 where 子句中的 OR RN IS NULL
。
我正在编写一个查询,它将接收 data explorer schema 中的 Posts
和 Users
表,并输出每个用户的第 10 个和第 100 个 post id。输出将是第 10 个或第 100 个 post id 的列和第二列,说明它是来自该用户的第 10 个还是第 100 个 post。
我无法思考如何从每个用户那里获得第 10 个和第 100 个 post。我已经开始计算每个用户的 post 数量,但我的查询仍然没有将所有用户 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
我期待函数输出每个用户的 post 数量,看看我是否可以从那里提取第 10 个和第 100 个 post,但我想我会在错的方向。 Current query output
如有任何帮助,我们将不胜感激!
我建议为此使用 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
我假设左侧加入帖子是因为您希望返回所有用户,如果是这样,请注意没有帖子的任何用户都需要 where 子句中的 OR RN IS NULL
。