在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 ON
或ORDER BY
子句中的表達式。 customer
、total
和id
列的,順序與查詢相同的列的多列索引將提供最佳效能。 附加說明
對於customer
列基數較高的資料(每個客戶少量的行),DISTINCT ON
方法非常有效率。但是,對於customer
列基數較低的資料(每個客戶大量的行),其他查詢技術可能更有效率。
以上是如何通過查詢選擇PostgreSQL組中的每個組的第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!