首頁 > 資料庫 > mysql教程 > 如何通過查詢選擇PostgreSQL組中的每個組的第一行?

如何通過查詢選擇PostgreSQL組中的每個組的第一行?

DDD
發布: 2025-01-25 20:21:10
原創
965 人瀏覽過

How to Select the First Row of Each Group in a PostgreSQL GROUP BY Query?

在PostgreSQL的GROUP BY分組中選擇第一行

在PostgreSQL中,選擇GROUP BY操作中每個分組的第一行是一個常見需求。為此,我們可以使用強大的DISTINCT ON子句。

<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total
FROM purchases
ORDER BY customer, total DESC</code>
登入後複製

DISTINCT ON子句允許我們定義哪些表達式被認為是重複項。在本例中,我們指定了customer列,這表示只有具有相同customer值的行才會被視為重複項。

ORDER BY子句定義了處理行的順序。每個customer組中的第一行將是總計值最高的那一行。如果有多行具有相同的最大總計值,則決定因素將是id列定義的順序。

關鍵點

  • DISTINCT ON是PostgreSQL的一個擴展,讓我們可以指定哪些表達式來決定重複項。
  • DISTINCT ON表達式必須與ORDER BY子句中的前導表達式相符。
  • ORDER BY子句可用來決定每個群組內行的優先權。
  • 你可以在SELECT列表中包含不在DISTINCT ONORDER BY子句中的表達式。
  • 查詢所使用的索引會顯著影響效能。一個跨越customertotalid列的,順序與查詢相同的列的多列索引將提供最佳效能。

附加說明

對於customer列基數較高的資料(每個客戶少量的行),DISTINCT ON方法非常有效率。但是,對於customer列基數較低的資料(每個客戶大量的行),其他查詢技術可能更有效率。

以上是如何通過查詢選擇PostgreSQL組中的每個組的第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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