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
将grouper
replace为要分组的列的名称,并使用保存值的列的名称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