テーブルから複数の列を取得するクエリでは、他の列の個別の値を保持しながら、特定の列を保存します。 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 中国語 Web サイトの他の関連記事を参照してください。