开发者社区> 问答> 正文

MySQL选择前n个最大值?mysql

如何从表中选择前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

展开
收起
保持可爱mmm 2020-05-17 18:07:59 503 0
1 条回答
写回答
取消 提交回答
  • 对于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。来源:stack overflow

    2020-05-17 18:18:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像