首頁 >資料庫 >mysql教程 >如何使用不同的 ORDER BY 標準查詢 PostgreSQL 中的不同行?

如何使用不同的 ORDER BY 標準查詢 PostgreSQL 中的不同行?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-21 12:26:09499瀏覽

How to Query DISTINCT Rows in PostgreSQL with Different ORDER BY Criteria?

PostgreSQL DISTINCT 查詢:處理 ORDER BY 差

DISTINCT ON 表達式與初始 DISTINCT ON 標準不一致時,PostgreSQL 的 ORDER BY 子句可能會帶來挑戰。 這是因為 DISTINCT ON 選擇由 DISTINCT ON 表達式定義的每個群組的第一行,由 ORDER BY 子句決定。 順序不符會導致錯誤。

要修正此問題,DISTINCT ON 表達式通常應該是 ORDER BY 子句中的主要條件。 但是,如果首選不同的順序,則可以使用其他方法。

唯一行選擇的替代方法

不要只依賴 DISTINCT ON,請考慮以下策略來根據所選順序從每個群組中檢索「頂部」行:

方法 1:每組最大 N

此方法使用子查詢來識別每個群組內的最大值(或最小值),然後連接回原始表以檢索對應的行。 這是一個例子:

<code class="language-sql">SELECT t1.* 
FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) as max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC;</code>

方法二:巢狀DISTINCT ON查詢

更簡潔的 PostgreSQL 特定解決方案使用巢狀查詢:

<code class="language-sql">SELECT * 
FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC;</code>

這些方法提供了選擇唯一行的靈活性,同時保持對最終排序的控制,即使它與分組標準不同。 選擇最適合您的特定需求和資料結構的方法。

以上是如何使用不同的 ORDER BY 標準查詢 PostgreSQL 中的不同行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn