使用 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中文网其他相关文章!