gpt4 book ai didi

mysql选择前n个最大值

转载 作者:行者123 更新时间:2023-11-30 22:11:59 26 4
gpt4 key购买 nike

如何从表格中选择前 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 您都可以使用描述的方法 here模拟对分区的排序。

编辑:其实this本文将为您提供您所需要的。

基本上是这样的

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,因此应该将其合并为某个常量,这在比较(在您的情况下,它将是 val 域的 MIN,在文章中是 MAX)。

编辑 2:我忘了说是 LIMIT 2,1 决定了 n (LIMIT n,1)。

关于mysql选择前n个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com