首頁 > 資料庫 > mysql教程 > 如何檢索PostgreSQL中每個組的最早條目?

如何檢索PostgreSQL中每個組的最早條目?

Linda Hamilton
發布: 2025-01-25 20:11:11
原創
694 人瀏覽過

How to Retrieve the Earliest Entry for Each Group in PostgreSQL?

在Postgresql

中,有效地選擇了每個組的第一行 >本指南演示瞭如何在PostgreSQL中有效檢索每個組的最早條目,這是使用分組數據時的常見任務。 最有效的方法利用

子句。

DISTINCT ON

>利用

子句DISTINCT ON > PostgreSQL的

子句提供了一種簡潔有效的方法,可以從指定列定義的每個組中選擇第一行。 它的語法很簡單:

DISTINCT ON

>
<code class="language-sql">SELECT DISTINCT ON (column_list)
FROM table_name
ORDER BY column_list, ...;</code>
登入後複製
>示例:確定每個客戶的首次購買

考慮帶有列列),請使用此查詢:

purchases idcustomer重要的考慮因素:total id

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

如果列允許null值,則在>子句中include

以確保優先級。
  • 選擇列表靈活性: 列表不限於total>或NULLS LAST中的列。 ORDER BY
  • > postgresql特異性:
  • 是一個特定於後的擴展,而不是標準SQL的一部分。 > 替代訂購:SELECT> DISTINCT ON以不同於分組順序的最終結果,嵌套查詢並應用輔助ORDER BY子句。
  • 通過索引優化性能:DISTINCT ON>
  • >在
  • 上創建一個多列索引可顯著提高查詢性能,尤其是當每個客戶的行數相對較小時。 > 大型數據集的 替代方法:ORDER BY
  • >
對於每個客戶的數據集,替代策略可能會更有效:>

>子征服:

>使用子查詢或相關子查詢為每個客戶找到最大值

,然後為這些客戶的最小(customer, total DESC, id)選擇該行。

臨時表/ctes:創建一個包含獨特客戶的臨時表或公共表表達式(CTE),並與原始表一起連接以檢索所需的行。 這種方法可能對複雜的場景有益。 >

以上是如何檢索PostgreSQL中每個組的最早條目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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