簡介:從特定條件定義的每個群組中檢索頂行是常見的資料庫操作。 PostgreSQL 提供了多種方法,其中 DISTINCT ON
因其效率和易用性而脫穎而出。
DISTINCT ON:強大的技術: DISTINCT ON
以所選順序優雅地處理每個組中第一行的選擇。 您指定分組列和順序來決定「第一」行。
文法與用法: DISTINCT ON
子句很簡潔:
<code class="language-sql">SELECT DISTINCT ON (group_column1, group_column2, ...) column1, column2, ... FROM table_name ORDER BY group_column1, group_column2, ..., ordering_column;</code>
group_column1
、group_column2
、...:定義群組的欄位。 column1
, column2
, ...:要檢索的欄位。 ORDER BY
:指定每組內的排序;依照此順序選擇第一行。 說明性範例:要取得每位顧客最近購買的詳細資訊:
<code class="language-sql">SELECT DISTINCT ON (customer_id) customer_id, purchase_date, amount FROM purchases ORDER BY customer_id, purchase_date DESC;</code>
效能增強: 雖然 DISTINCT ON
通常很高效,但索引可以顯著提高效能,特別是對於大型資料集。 合適的索引是:
<code class="language-sql">CREATE INDEX purchases_idx ON purchases (customer_id, purchase_date DESC);</code>
重要注意事項:
NULL
值,請在 NULLS LAST
子句中使用 NULLS FIRST
或 ORDER BY
以獲得可預測的結果。 DISTINCT ON
順序不同,請將查詢包裝在另一個帶有單獨 SELECT
子句的 ORDER BY
語句中。 結論: DISTINCT ON
提供了一種穩健且高效的方法來從 PostgreSQL 中的每個群組中選擇第一行。 戰略索引進一步優化效能,使其成為資料分析和聚合的寶貴工具。
以上是如何使用 DISTINCT ON 有效率地選擇 PostgreSQL 中每個群組的第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!