首页 >数据库 >mysql教程 >如何从数据集中的每个组中检索最大的最大的人?

如何从数据集中的每个组中检索最大的最大的人?

Susan Sarandon
Susan Sarandon原创
2025-01-25 10:06:11655浏览

How to Retrieve the Top N Oldest People from Each Group in a Dataset?

有效地从每个组中选择最古老的个体

>本文演示了两种方法,用于检索数据集中每个组的顶部N(在这种情况下,两个)最大的个体。 第一个使用AUNION ALL的方法,而第二个则采用行编号来进行更可扩展的解决方案。>

>

方法1:联合所有(适用于少量固定数量的小组)> 对于已知和有限数量的组,此方法很简单。 它单独选择每个组最大的个体,并结合结果。 但是,随着组数量的增加,这种方法变得繁琐且效率低下。

方法2:行编号(大量或未知数组的可扩展解决方案)
<code class="language-sql">(
  SELECT *
  FROM mytable
  WHERE `group` = 1  -- Group 1
  ORDER BY age DESC
  LIMIT 2
)
UNION ALL
(
  SELECT *
  FROM mytable
  WHERE `group` = 2  -- Group 2
  ORDER BY age DESC
  LIMIT 2
)
-- ... Add more UNION ALL clauses for additional groups</code>
此方法将各个组中的每个人都动态分配,并按年龄按降序顺序排序。 这允许在所有组中有效选择最大的人。

> 此方法利用变量

分别跟踪行号和组。

初始化这些变量。 最终
<code class="language-sql">SELECT person, `group`, age
FROM
(
   SELECT person, `group`, age,
      (@num:=IF(@group = `group`, @num +1, IF(@group := `group`, 1, 1))) AS row_number
  FROM test t
  CROSS JOIN (SELECT @num:=0, @group:=NULL) c
  ORDER BY `group`, Age DESC, person
) AS x
WHERE x.row_number <= 2 -- Select the top 2 from each group</code>
子句过滤结果仅包括每个组的前2个个人。 与许多组的数据集相比,此方法比许多组的数据集更有效和适应。

以上是如何从数据集中的每个组中检索最大的最大的人?的详细内容。更多信息请关注PHP中文网其他相关文章!

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