mysqlselecttop n最大值

你如何从表格中select前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每个组的最大值。

 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) 

对于任何你可以使用这里描述的方法模拟分区的排名。

编辑:其实这篇文章会给你正是你所需要的。

基本上是这样的

 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 

grouperreplace为要分组的列的名称,并使用保存值的​​列的名称val

为了弄清楚它的function究竟是从最内在的查询中逐步进行的,并运行它们。

此外,还有一个小的简化 – findmid的子查询可以返回NULL,如果某个类别没有足够的值,所以应该有一个常数的COALESCE,在比较中是有意义的(在你的情况下,它将是MIN val的域,文中是MAX)。

编辑2:我忘了提及,它是极限2.1确定n(极限n,1)。

如果您使用mySQl,为什么不使用LIMITfunction? 按降序对logging进行sorting,并限制排名前n即:

 SELECT yourColumnName FROM yourTableName ORDER BY Id desc LIMIT 0,3