Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为每个post-data explorer查找PostTypeId的最大分数_Sql_Sql Server_Tsql_Dataexplorer - Fatal编程技术网

Sql 为每个post-data explorer查找PostTypeId的最大分数

Sql 为每个post-data explorer查找PostTypeId的最大分数,sql,sql-server,tsql,dataexplorer,Sql,Sql Server,Tsql,Dataexplorer,我正在尝试创建一个查询,该查询将显示每个用户的帖子Id、PostTypeId以及该帖子类型的最大分数 例如,对于所有有问题的帖子(PostTypeId=1),所有行(PostTypeId=1)的最大分数列将为“22363” 到目前为止,我只得到一个表,每个职位的得分和排序的描述,以获得最大的分数。我看到一个问题的最高分数是22363,我想显示所有问题的这个数字 SELECT TOP 100 Users.Id, DisplayName, PostTypeId,

我正在尝试创建一个查询,该查询将显示每个用户的帖子Id、PostTypeId以及该帖子类型的最大分数

例如,对于所有有问题的帖子(PostTypeId=1),所有行(PostTypeId=1)的最大分数列将为“22363”

到目前为止,我只得到一个表,每个职位的得分和排序的描述,以获得最大的分数。我看到一个问题的最高分数是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执行此操作,而不仅仅是问题


您可以使用
行编号()
按用户划分的最大分数降序为每行分配一个编号。然后只拿第一张唱片

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;
如果您希望看到平局,即如果用户在多个帖子类型中获得最高分数,请将
行数()
替换为
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;

谢谢你的回答!您的查询仍然没有按类型分配最大分数,它仍然只是获取帖子的最大分数。嗯,我可能没弄好。如果您将
按u.id划分
更改为
按p.posttypeid划分
,这是否满足了您的需要?如果没有,按u.id、p.posttypeid划分的
是否适用于您?没有,它们都不适用:-(看起来应该是这样的。这是可以在data explorer上运行的当前查询:@mel:抱歉,我没有得到您想要的内容。恐怕:您可以编辑您的问题并为给定的输入和预期的输出添加一个示例吗?也许这会有所帮助。