在從表中檢索多列的查詢中,可能需要根據特定列,同時保留其他列中的不同值。這可能具有挑戰性,因為 DISTINCT 和 GROUP BY 等傳統子句對整行進行操作。
為了滿足這項需求,可以使用 ROW_NUMBER() 函數。此函數為指定列定義的分割區內的每一行指派一個唯一的序號。透過將 ROW_NUMBER() 與 PARTITION BY 和 ORDER BY 子句結合,您可以根據所需列中的值建立每個分割區內的行排名。
考慮以下查詢:
SELECT ID, Email, ProductName, ProductModel FROM Products
要修改此查詢以使其只返回唯一的電子郵件,我們可以使用以下命令代碼:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) AS rn FROM Products ) AS a WHERE rn = 1
ROW_NUMBER () 函數根據電子郵件列將結果劃分為多個分區,並為每一行在其分區內分配唯一的排名。隨後的 ORDER BY 子句確保每個分區中最後出現的行排在第一個。最後的 WHERE 子句過濾結果,僅包含排名為 1 的行,有效消除重複的電子郵件。
這種方法允許您指定任何列作為分區和排名的基礎,為定制查詢提供了靈活性根據您的具體要求。
以上是如何消除 SQL SELECT 陳述式中的重複電子郵件,同時保留其他欄位資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!