首页  >  文章  >  数据库  >  如何在MySQL中模拟排名以选择前n个最大值?

如何在MySQL中模拟排名以选择前n个最大值?

Patricia Arquette
Patricia Arquette原创
2024-11-10 15:40:03735浏览

How to Simulate Rank in MySQL to Select Top n Maximum Values?

使用 MySQL 模拟排名以选择前 n 个最大值

从表中选择前 n 个最大值可能在 MySQL 中具有挑战性,尤其是当所需的 n 大于表中不同组的数量时。

使用联合查询近似前 n 个最大值

对于 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,我们可以使用其他地方描述的技术来模拟分区上的排名。其中一种方法是使用为每个组返回第 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

在此查询中,LIMIT 2,1 将 n 值设置为 2。将 grouper 替换为分组列name 和 val 为您特定场景中的值列名称。

以上是如何在MySQL中模拟排名以选择前n个最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn