ホームページ >データベース >mysql チュートリアル >SQL で他の列の重複を保持したまま、重複するメールを削除するにはどうすればよいですか?
DISTINCT を使用した SQL クエリでの電子メールの重複の排除
提供された SQL クエリで、許可しながら一意の電子メール エントリを返すように変更することを目的としています。他の列に重複があります。 DISTINCT と GROUP BY は行全体を操作するため、この目標を達成するには別のアプローチが必要です。
解決策は、SQL Server の ROW_NUMBER() 関数を利用するサブクエリを組み込むことです。電子メールに基づいてデータセットを分割し、ROW_NUMBER() 関数を使用して ID の降順で並べ替えることにより、各電子メール グループ内の各行に一意のランクを割り当てることができます。
その後、メイン クエリは、ランク値 (rn) は 1 に等しく、結果には個別の電子メールごとに 1 行のみが含まれることが保証されます。
これは変更されたものです。 query:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1
このクエリは、他の列の重複を保持しながら、重複した電子メールを効果的に削除します。次の例に示すように、サブクエリに条件フィルターを追加することでクエリをさらに絞り込むことができます。
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%' ) a WHERE rn = 1
この変更されたクエリは、ProductModel が 2 で名前が 'CYBER% で始まる製品に結果を制限します。 '、これらの条件内で重複しない電子メール エントリを保持します。
以上がSQL で他の列の重複を保持したまま、重複するメールを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。