当前位置: 首页 > 面试题库 >

从每个组中选择前n条记录

许嘉福
2023-03-14
问题内容

我试图从看起来像这样的数据库表结果中选择前2条记录

SubjectId |  StudentId | Levelid | total
------------------------------------------
 1        |  1         |   1     | 89
 1        |  2         |   1     | 77
 1        |  3         |   1     | 61
 2        |  4         |   1     | 60
 2        |  5         |   1     | 55
 2        |  6         |   1     | 45

我试过这个查询

SELECT rv.subjectid,
       rv.total,
       rv.Studentid,
       rv.levelid
  FROM ResultView rv
       LEFT JOIN ResultView rv2
              ON ( rv.subjectid = rv2.subjectid 
    AND
rv.total <= rv2.total ) 
 GROUP BY rv.subjectid,
          rv.total,
          rv.Studentid
HAVING COUNT( * ) <= 2
order by rv.subjectid desc

但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议

如何选择每个组的前N行?

但是我为每个受检者得到两个以上

我究竟做错了什么?


问题答案:

您可以使用相关的子查询:

select  *
from    ResultView rv1
where   SubjectId || '-' || StudentId || '-' || LevelId in
        (
        select  SubjectId || '-' || StudentId || '-' || LevelId
        from    ResultView rv2
        where   SubjectID = rv1.SubjectID
        order by
                total desc
        limit   2
        )

该查询通过串联三列来构造单列主键。如果您有真正的主键(如ResultViewID),则可以用代替SubjectId || '-' || StudentId || '-' || LevelId

SQL Fiddle中的示例。



 类似资料:
  • 问题内容: 我有一张桌子,我想在该表格的基础上从每个组中获取前N个项目。如果我设置了那将从每个组中选择第一行,或者如果我设置了那那将从每个组中选择前5行。请帮我。 问题答案: 有多种方法可以做到这一点。这是一个使用相关子查询的查询:

  • 问题内容: 我们是postgres的新手,我们有以下查询,通过该查询我们可以从每个类别中选择前N个记录。 以上查询的输出是这样的 但是我们的要求有所不同,我们想从每个类别中选择前n%个记录,其中n不固定,n基于每个组中某些元素的百分比。 问题答案: 要基于每个组中行数的百分比来检索行,可以使用两个窗口函数:一个对行进行计数,另一个对行赋予唯一编号。 SQLFiddle示例:http ://sqlf

  • 问题内容: 嗨,我是Spark SQL的新手。我有一个这样的数据框。 我想为每个列表器在Spark sql中选择前10个时间戳值。 我尝试了以下查询。它引发错误。 我想为每个列表器选择我需要采用的前10个时间戳值。任何帮助将不胜感激。 问题答案: 这不行吗? 编辑: 哦,我明白了。您要:

  • 问题内容: 我已阅读这篇文章:http : //www.xaprb.com/blog/2006/12/07/how- to-select-the-firstleastmax-row-per-group-in- sql/ 并搜索其他问题 我有一个像这样的表: 我正在尝试获取按user.id分组的table.id的计数,如果user.id的计数大于7,则仅将结果显示为7(也就是将计数结果限制为7)。

  • 问题内容: 是否有更好的方法从MySQL表中获取多个“前X个”结果?当不同的 foo 的数量很少时,我可以通过联合轻松地完成此操作: 我显然可以继续为foo的每个值添加联合。但是,当foo有500多个不同的值并且我需要每个值的前X个时,这是不切实际的。 问题答案: 这种查询可以用“每组最大n”来表述,您希望每个“组”的前10个得分为“ foo”。 我建议您看一下这个链接,它很好地处理了这个问题,从

  • 问题内容: 我有一个包含博客文章的数据库表。我想在首页上显示每个类别的一则(或更多)帖子,例如按日期排序。 所以我的posts表看起来像这样: 我将如何创建这样的查询?我曾经考虑过使用group-by或subselect,但是我不确定这是否对性能有好处…该表具有大量记录。 问题答案: MySQL 不 支持解析功能(ROW_NUMBER,RANK,DENSE_RANK,NTILE …),但是您可以使