首頁 > 資料庫 > mysql教程 > 如何從數據集中的每個組中檢索最大的最大的人?

如何從數據集中的每個組中檢索最大的最大的人?

Susan Sarandon
發布: 2025-01-25 10:06:11
原創
626 人瀏覽過

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

有效地從每個組別中選擇最年長的個體

本文示範了兩種從資料集中的每個組別中檢索前 N 個(在本例中為兩個)最古老個體的方法。 第一個採用 UNION ALL 方法,而第二個採用行編號以獲得更具可擴展性的解決方案。

方法1:UNION ALL(適合數量較少、固定數量的組別)

對於已知且數量有限的群組來說,此方法非常簡單。 它從每個組中單獨選擇前 N 個最古老的個體並將結果組合起來。 然而,隨著組別數量的增加,這種方法變得麻煩且低效。

(
  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
登入後複製

方法 2:行編號(針對大量或未知數量的組別的可擴展解決方案)

此方法為各自組別中的每個人動態分配行號,按年齡降序排列。 這樣可以有效地選擇所有群體中前 N 個最年長的個體。

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
登入後複製

此方法利用變數 @num@group 分別追蹤行號和群組。 CROSS JOIN 初始化這些變數。 最後的 WHERE 子句過濾結果,僅包含每組中排名前 2 的個體。 對於具有多個組的資料集,此方法比 UNION ALL 方法顯著更有效率且適應性更強。

以上是如何從數據集中的每個組中檢索最大的最大的人?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板