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

在SQL中,如何为每个组选择前2行

申屠秦斩
2023-03-14
问题内容

我有一张桌子,如下所示:

NAME    SCORE
-----------------
willy       1
willy       2
willy       3
zoe         4
zoe         5
zoe         6

这是样本

的汇总功能group by仅允许我获得每个方面的最高分name。我想查询以获得每个人的最高2分name,我该怎么办?

我的预期输出是

NAME    SCORE
-----------------
willy       2
willy       3
zoe         5
zoe         6

问题答案:
SELECT *
FROM   test s
WHERE 
        (
            SELECT  COUNT(*) 
            FROM    test  f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2
  • SQLFiddle演示


 类似资料:
  • 问题内容: 在C#中将是这样的: Linq-To-Sql将其转换为以下T-SQL代码: 但是它与MySQL不兼容。 问题答案: 当我写 有用。在其他RDBMS中,IIRC这样的语句是不可能的,因为不属于任何组合键的不属于分组键的列就被引用了。 这种“怪癖”的行为与我想要的行为非常接近。所以我用它来获得想要的结果:

  • 问题内容: 我有这个SQL查询: 这将导致类似于以下的输出: 我想每个Foo仅保留第一行,而忽略其余的行。 我怎么做? 问题答案:

  • 问题内容: 我想针对每个标签针对不同的产品类别挑选出最畅销的3种产品。数据如下所示: 我知道如何使用ROW_NUMBER()提取每个标签中销售量最高的3种产品,但是它将返回product1,product2,product3。我不想要product3,因为它与product2属于同一类别。我要代替product4。如何在SQL Server中执行此操作? 问题答案: 第一个ROW_NUMBER删除

  • 问题内容: 我有这张表 language_id是指记录所用的语言。我想做的是检索 每个language_id中 最近的五个记录(ORDER BY time_posted DESC LIMIT 5)的列表。我可以使用许多不同的SQL查询在PHP中循环执行此操作,但我觉得有一种更简单的方法。 我必须得到一本有关SQL的书,哈哈。 谢谢。 问题答案: 这是我在MySQL中解决此“每组前N个”类型的查询的

  • 问题内容: 我想将一列截断为最多100个字符。您如何在SQL Server中做到这一点? 问题答案: 试试这个: 编辑: 您也可以尝试如下操作: 例如,如果您想修剪记录中的最后5个字符。

  • 问题内容: 我有一个生成的DataFrame,如下所示: 结果如下: 如您所见,DataFrame按升序排列,然后按降序排列。 我想选择每个组的第一行,即 从小时== 0的组中选择(0,cat26,30.9) 从小时= 1的组中选择(1,cat67,28.5) 从小时== 2的组中选择(2,cat56,39.6) 等等 因此,所需的输出将是: 能够选择每个组的前N行也可能很方便。 任何帮助都将受到