」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何通過查詢選擇PostgreSQL組中的每個組的第一行?

如何通過查詢選擇PostgreSQL組中的每個組的第一行?

發佈於2025-02-10
瀏覽:569

How to Select the First Row of Each Group in a PostgreSQL GROUP BY Query?

在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 ONORDER BY子句中的表達式。
  • 查詢使用的索引會顯著影響性能。一個跨越customertotalid列的,順序與查詢相同的列的多列索引將提供最佳性能。

附加說明

對於customer列基數較高的數據(每個客戶少量的行),DISTINCT ON方法非常高效。但是,對於customer列基數較低的數據(每個客戶大量的行),其他查詢技術可能更高效。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3