ホームページ > データベース > mysql チュートリアル > 他の列データを保持したまま、SQL SELECT ステートメントで重複する電子メールを削除するにはどうすればよいですか?

他の列データを保持したまま、SQL SELECT ステートメントで重複する電子メールを削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-03 04:54:39
オリジナル
265 人が閲覧しました

How Can I Eliminate Duplicate Emails in a SQL SELECT Statement While Retaining Other Column Data?

単一列の DISTINCT を使用した SELECT での重複する電子メールの削除

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート