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

MySQL选择前n个最大值

慕通
2023-03-14
问题内容

如何从表中选择前n个最大值?

对于这样的表:

column1  column2
   1       foo
   2       foo
   3       foo
   4       foo
   5       bar
   6       bar
   7       bar
   8       bar

对于n = 2,结果需要为:

3    
4    
7    
8

下面的方法仅为每个组选择最大值。

SELECT max(column1) FROM table GROUP BY column2

返回值:

4
8

问题答案:

对于n = 2,您可以

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

对于任何n,您都可以使用此处介绍的方法模拟分区之上的排名。

编辑:其实这个文章会给你你需要什么。

基本上是这样的

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

grouper要分组val的列的名称和保存值的列的名称替换。

要弄清楚它的功能是如何进行的,请从最内部的查询中逐步进行并运行它们。

而且,有一点简化- mid如果某些类别没有足够的值,则子查询可以返回NULL,因此应该在比较中将该常量保留为COALESCE(在您的情况下为MIN,
val的域,在本文中为MAX)。

EDIT2: 我忘了提到确定n(LIMIT n,1)的是LIMIT 2,1。



 类似资料:
  • 问题内容: 我真的很困惑查询需要返回在特定列上具有最大值的前N行。 例如,如果行具有相同的值。我必须返回还是要排。 问题答案: 如果您这样做: 您将获得前N行。 如果您这样做: 或者,您可以将其表达为: 从概念上讲,以下是您想要执行的操作,但在MySQL中可能不起作用:

  • 问题内容: 我想在名为 id的 列( 主键)中 从MySQL数据库中选择最后50行。目标是行应该被分类 ID 在 ASC 秩序,这就是为什么这个查询不工作 同样值得注意的是,可以对行进行操作(删除),这就是为什么以下查询也不起作用的原因 问题 :如何从MySQL数据库中检索可以操纵并按ASC顺序排列的最后N行? 问题答案: 您可以使用子查询来做到这一点: 这将从中选择 最后 50行,然后按升序对其

  • 问题内容: 我有一个带有索引(自动递增)和整数值的表。该表长百万行。 如何搜索某个数字是否最有效地出现在表的最后n行中? 问题答案: 从@chaos给出的答案开始,但进行了一些修改: 如果使用,则应始终使用。对于RDBMS表,没有保证的隐式顺序。 通常, 您可能 会 按主键的顺序获得行,但是您不能依靠它,也不是可移植的。 如果按降序排列,则无需事先知道表中的行数。 您必须为派生表指定一个 相关名称

  • 我想从MySQL数据库中选择最后50行,列名为id,这是主键。目标是行应该按照ASC顺序按id排序,这就是为什么这个查询不起作用 同样值得注意的是,行可以被操纵(删除),这就是为什么下面的查询也不起作用 问题:如何从MySQL数据库中检索最后N行,这些行可以被操作并按ASC顺序排列?

  • 问题内容: 我已阅读这篇文章: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)。

  • 问题内容: 我有超过35列的表,前20列是固定的,并且每个表中的列号都不同。我需要从表中选择最后10列,例如,我该如何实现?就像此查询返回前20条记录 我想对列执行相同的操作,即在查询中返回列名称,然后在其他查询中使用这些名称,例如: 问题答案: 您可以通过准备好的语句来实现。您的查询将如下所示: -这将创建一个内容如下的SQL: (在样品上方我不得不选择在2列中,可在该部分进行调整:) 因此,您