在PostgreSQL的GROUP BY分組中選擇第一行
在PostgreSQL中,選擇GROUP BY操作中每個分組的第一行是一個常見需求。為此,我們可以使用強大的DISTINCT ON
子句。
SELECT DISTINCT ON (customer) id, customer, total
FROM purchases
ORDER BY customer, total DESC
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
列基數較低的數據(每個客戶大量的行),其他查詢技術可能更高效。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3