查找每个 post 的 PostTypeId 的最大分数 - 数据浏览器
Finding the maximum score of a PostTypeId for each post - data explorer
我正在尝试创建一个查询,该查询将显示每个用户的 post Id、PostTypeId 以及该 post 类型的最大分数。
例如,对于所有 post 问题 (PostTypeId = 1),则 (PostTypeId = 1) 的所有行的最大分数列将为“22363”。
到目前为止,我只得到每个 post 的分数的 table,并按 DESC 排序以获得最高分数。我看到一个问题的最高分数是 22363,我想为所有问题显示这个数字。
SELECT
TOP 100
Users.Id,
DisplayName,
PostTypeId,
MAX(CAST(Score AS float)) AS MaxAnswerScore
FROM
Posts
INNER JOIN
Users ON Users.Id = OwnerUserId
GROUP BY
Users.Id, DisplayName, PostTypeId
ORDER BY
MaxAnswerScore DESC
我正在尝试对所有 PostTypeId 执行此操作,而不仅仅是问题。
Current implementation
您可以使用 row_number()
为每一行分配一个数字,按用户划分的最大分数降序排列。那么只取第一条记录。
SELECT x.id,
x.displayname,
x.posttypeid,
x.score
FROM (SELECT u.id,
u.displayname,
p.posttypeid,
max(cast(score AS float)) score,
row_number() OVER (PARTITION BY u.id
ORDER BY max(cast(score AS float)) DESC) rn
FROM users u
INNER JOIN posts p
ON p.owneruserid = u.id
GROUP BY u.id,
u.displayname,
p.posttypeid) x
WHERE x.rn = 1
ORDER BY x.score DESC;
如果您想查看平局,即如果用户在不止一种 post 类型中获得最高分,请将 row_number()
替换为 rank()
。
编辑:
仍然不确定你想要什么,但让我们再试一次:
SELECT u1.id,
u1.displayname,
p1.posttypeid,
max(cast(p1.score AS float)) score,
(SELECT max(cast(p2.score AS float))
FROM posts p2
WHERE p2.posttypeid = p1.posttypeid) maximumscore
FROM users u1
INNER JOIN posts p1
ON p1.owneruserid = u1.id
GROUP BY u1.id,
u1.displayname,
p1.posttypeid
ORDER BY p1.posttypeid,
max(cast(p1.score AS float)) DESC;
我正在尝试创建一个查询,该查询将显示每个用户的 post Id、PostTypeId 以及该 post 类型的最大分数。
例如,对于所有 post 问题 (PostTypeId = 1),则 (PostTypeId = 1) 的所有行的最大分数列将为“22363”。
到目前为止,我只得到每个 post 的分数的 table,并按 DESC 排序以获得最高分数。我看到一个问题的最高分数是 22363,我想为所有问题显示这个数字。
SELECT
TOP 100
Users.Id,
DisplayName,
PostTypeId,
MAX(CAST(Score AS float)) AS MaxAnswerScore
FROM
Posts
INNER JOIN
Users ON Users.Id = OwnerUserId
GROUP BY
Users.Id, DisplayName, PostTypeId
ORDER BY
MaxAnswerScore DESC
我正在尝试对所有 PostTypeId 执行此操作,而不仅仅是问题。
Current implementation
您可以使用 row_number()
为每一行分配一个数字,按用户划分的最大分数降序排列。那么只取第一条记录。
SELECT x.id,
x.displayname,
x.posttypeid,
x.score
FROM (SELECT u.id,
u.displayname,
p.posttypeid,
max(cast(score AS float)) score,
row_number() OVER (PARTITION BY u.id
ORDER BY max(cast(score AS float)) DESC) rn
FROM users u
INNER JOIN posts p
ON p.owneruserid = u.id
GROUP BY u.id,
u.displayname,
p.posttypeid) x
WHERE x.rn = 1
ORDER BY x.score DESC;
如果您想查看平局,即如果用户在不止一种 post 类型中获得最高分,请将 row_number()
替换为 rank()
。
编辑:
仍然不确定你想要什么,但让我们再试一次:
SELECT u1.id,
u1.displayname,
p1.posttypeid,
max(cast(p1.score AS float)) score,
(SELECT max(cast(p2.score AS float))
FROM posts p2
WHERE p2.posttypeid = p1.posttypeid) maximumscore
FROM users u1
INNER JOIN posts p1
ON p1.owneruserid = u1.id
GROUP BY u1.id,
u1.displayname,
p1.posttypeid
ORDER BY p1.posttypeid,
max(cast(p1.score AS float)) DESC;