MySQL选择前n个最大值

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

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

以上是 MySQL选择前n个最大值 的全部内容, 来源链接: utcz.com/qa/402723.html

回到顶部