有效地从每个组中选择最古老的个体
>本文演示了两种方法,用于检索数据集中每个组的顶部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中文网其他相关文章!