在PostgreSQL分組查詢中選擇第一行
處理分組資料時,通常需要檢索特定行,例如每個群組中的第一行或最後一行。本教學課程旨在解答如何在PostgreSQL中的分組查詢中選擇第一行。
解:DISTINCT ON
PostgreSQL提供了一個方便的功能,稱為DISTINCT ON,它允許選擇群組內重複行的第一個(或最後一個)出現。文法如下:
<code class="language-sql">SELECT DISTINCT ON (DISTINCT_COLUMNS) COLUMNS FROM TABLE ORDER BY GROUPING_COLUMN, SORT_ORDER;</code>
應用於給定問題
在提供的範例中,我們希望根據最高總值檢索purchases表中每個客戶的第一行。我們可以使用DISTINCT ON實作如下:
<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total FROM purchases ORDER BY customer, total DESC, id;</code>
此查詢將輸出所需結果:
FIRST(id) | customer | FIRST(total) |
---|---|---|
1 | Joe | 5 |
2 | Sally | 3 |
解釋
DISTINCT ON (customer)
指定我們希望以customer列分組結果並選擇不同的值。 ORDER BY customer, total DESC, id
先按customer排序結果(用於分組),然後按total降序排序(找出總值最高的第一行),最後按id排序以解決衝突(如果有)。 附加說明
DISTINCT ON
子句必須包含在ORDER BY
子句中,但標準不需要額外的id列。 NULLS LAST
加到ORDER BY
子句中:<code class="language-sql">ORDER BY customer, total DESC NULLS LAST, id;</code>
結論
PostgreSQL中的DISTINCT ON功能提供了一種高效且靈活的方法來選擇分組查詢中的第一行(或最後一行)。透過利用此功能,開發人員可以輕鬆分析分組資料並檢索必要的資訊。
以上是如何選擇 PostgreSQL Group By 查詢中的第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!