рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдПрдБ: рд╡реНрдпрд╛рдкрдХ рддрд░реАрдХреЗ рдФрд░ рд╢реНрд░реЗрд╖реНрда рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ

SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдЬрд╛рдиреЗрдВред SQL Server, MySQL, рдФрд░ PostgreSQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реАрдЦреЗрдВред
┬╖ 8 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдирд╛ рдбреЗрдЯрд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ, рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ, рдФрд░ рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛рдиреЗ рдХреА рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХреЛ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк, рд╕рдордЭреЗрдВрдЧреЗред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ DataCamp рдХреЗ Introduction to SQL рдФрд░ Learn SQL рдХреЛрд░реНрд╕ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛/рджреЗрддреА рд╣реВрдБ рддрд╛рдХрд┐ рдЖрдк SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рд╕реАрдЦ рд╕рдХреЗрдВред рд╕рд╛рде рд╣реА, рдореБрдЭреЗ SQL Basics Cheat Sheet рднреА рдЙрдкрдпреЛрдЧреА рд╕рдВрджрд░реНрдн рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВтАФрдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо SQL рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХрд╛ рд╕рд╛рд░ рд╣реИред

TL;DR

  • SELECT DISTINCT рдпрд╛ GROUP BY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдмрд▓ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдпреВрдирд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

  • рдмреЗрд╣рддрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП ROW_NUMBER() рдХреЛ CTE рдФрд░ DELETE рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЪреБрдирд┐рдВрджрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХреЗрдВ

  • рдХрд┐рд╕реА рднреА DBMS рдореЗрдВ рд╕рд░рд▓ рдбрд┐рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдмрдХреНрд╡реЗрд░реА (NOT IN / MIN()) рдХреЗ рд╕рд╛рде DELETE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

  • рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП, рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рд╕реЗ рдмреИрдЪ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдПрдБ

  • рдкреНрд░рд╛рдЗрдорд░реА рдХреА, рдпреВрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ, рдФрд░ рдЙрдЪрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд░реЛрдХреЗрдВ

SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛

SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рднреА рдпрд╛ рдЪреБрдиреЗ рд╣реБрдП рдХреЙрд▓рдореЛрдВ рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВред SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

  • рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХрд╛ рдЕрднрд╛рд╡: рдЬрдм рдЯреЗрдмрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдпрд╛ рдпреВрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛, рддреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рдХреЛрдИ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ред рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЯреЗрдмрд▓ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ рдФрд░/рдпрд╛ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рдЯрд┐рд╡ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреА рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВред
  • рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдБ: рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдорд░реНрдЬ рдХрд░рддреЗ рд╕рдордп, рдЧрд▓рдд рдЬреЙрдЗрди рдпрд╛ рдбреЗрдЯрд╛ рдлрд╝реЙрд░реНрдореЗрдЯ рдХреА рдЕрд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд▓рд╛ рд╕рдХрддреА рд╣реИрдВред
  • рдореИрдиреБрдЕрд▓ рдбреЗрдЯрд╛ рдПрдВрдЯреНрд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдБ: рдорд╛рдирд╡реАрдп рднреВрд▓, рдЬреИрд╕реЗ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХрдИ рдмрд╛рд░ рджрд░реНрдЬ рдХрд░рдирд╛, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рд╣реИред

рдЖрдЧреЗ рдХреЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреИрд╕реЗ рд╣рдЯрд╛рдПрдБред рд▓реЗрдЦ рдХреЛ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдмрд╛рдБрдЯрд╛ рдЧрдпрд╛ рд╣реИ: рдкрд╣рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрддрд╛рдПрдБрдЧреЗ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╛ рдбреИрд╢рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрдк рдЬреЛ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреИрд╕реЗ рд╣рдЯрд╛рдПрдБ; рджреВрд╕рд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреИрд╕реЗ рд╣рдЯрд╛рдПрдБред

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рдЪрд╛рдиреЗрдВ рдХрд┐ рдХреМрди-рд╕реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВред GROUP BY рдХреЗ рд╕рд╛рде HAVING COUNT(*) > 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдвреВрдБрдвреЗрдВ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрддреА рд╣реИрдВ:

SELECT Name, COUNT(*) AS duplicate_count
FROM customers
GROUP BY Name
HAVING COUNT(*) > 1;

рдпрд╣ рдХреНрд╡реЗрд░реА рд╣рд░ рдЙрд╕ Name рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрддрд╛ рд╣реИ, рд╕рд╛рде рдореЗрдВ рдЙрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рднреАред рдЖрдк рдЗрд╕реЗ рдХрдИ рдХреЙрд▓рдо рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВтАФрдЙрдиреНрд╣реЗрдВ SELECT рдФрд░ GROUP BY рджреЛрдиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ред

рд╣рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд░реИрдВрдХ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП ROW_NUMBER() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

SELECT ID, Name,
       ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) AS row_num
FROM customers;

рдЬрд╣рд╛рдБ row_num > 1 рд╣реИ, рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВред рдкрд╣рдЪрд╛рди рд╣реЛрдиреЗ рдкрд░, рдиреАрдЪреЗ рджрд┐рдП рдЕрдиреБрднрд╛рдЧреЛрдВ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣рдЯрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЪреБрдиреЗрдВред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдбреЗрдЯрд╛ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ

SQL рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдирд┐рдХрд╛рд▓рддреЗ рд╕рдордп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╣рд░ рддрд░реАрдХрд╛ DBMS рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ SQL Server, MySQL, рдФрд░ PostgreSQLред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рд╣рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдмрд╛рддреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓реЗрдВрдЧреЗред┬ардзреНрдпрд╛рди рд░рдЦреЗрдВ, рдпреЗ рддрд░реАрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рдпреВрдирд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдзрд╛рд░рднреВрдд рдЯреЗрдмрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗред

DISTINCT рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ

DISTINCT рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ SELECT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдпреВрдирд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП DISTINCT рдХреАрд╡рд░реНрдб рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ MySQL, PostgreSQL, рдФрд░ SQL Server рдореЗрдВ рд╕рдорд╛рди рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рдХреНрд╡реЗрд░реА customers рдЯреЗрдмрд▓ рд╕реЗ рдпреВрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреАред

SELECT DISTINCT Name 
FROM customers;

рдПрдЧреНрд░реАрдЧреЗрдЯ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде GROUP BY рдХрд╛ рдЙрдкрдпреЛрдЧ

GROUP BY рдХреНрд▓реЙрдЬрд╝, MAX(), MIN(), рдпрд╛ COUNT() рдЬреИрд╕реЗ рдПрдЧреНрд░реАрдЧреЗрдЯ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдЯреЗрдмрд▓реЛрдВ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред GROUP BY рдХреНрд▓реЙрдЬрд╝ рдпрд╣ рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЛ рд░рдЦрдирд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧреНрд░рд╛рд╣рдХ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдкрд░ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ ID рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк GROUP BY рдХреНрд▓реЙрдЬрд╝ рдХреЛ MAX() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

-- Delete duplicate rows from the 'customers' table (aliased as c1)
DELETE c1
FROM customers c1
-- Find the maximum ID for each unique Name
JOIN (
    SELECT Name, MAX(ID) AS MaxID
    FROM customers
    GROUP BY Name
) c2
-- Match rows based on 'Name' and keep the row with the maximum ID
ON c1.Name = c2.Name 
AND c1.ID < c2.MaxID;

MySQL рдФрд░ SQL Server GROUP BY рдХреЗ рд╕рд╛рде рдПрдЧреНрд░реАрдЧреЗрдЯ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдФрд░ JOIN рдХреНрд▓реЙрдЬрд╝ рд╡рд╛рд▓реЗ рдКрдкрд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред┬а

ROW_NUMBER() рдФрд░ Common Table Expressions (CTE) рдХрд╛ рдЙрдкрдпреЛрдЧ

ROW_NUMBER() рдлрд╝рдВрдХреНрд╢рди рдХреЛ Common Table Expression (CTE) рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░, рдЖрдк рдЕрдкрдиреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PARTITION BY рдФрд░ ORDER BY рдХреНрд▓реЙрдЬрд╝ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ ROW_NUMBER рд╣рд░ рдкрдВрдХреНрддрд┐ рдХреЛ рдХреНрд░рдорд╛рдВрдХ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдорд╛рдирджрдВрдб рди рдкреВрд░реА рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рдХреА рдХреНрд╡реЗрд░реА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд╣рдЪрд╛рдирддреА рд╣реИ рдФрд░ рдкрд╣рд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╛рдХреА рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИред

-- Common Table Expression (CTE) to rank rows based on 'Name'
WITH CTE AS (
    SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID ASC) AS RowNum
    FROM customers
)
-- Select only the unique records where RowNum = 1
SELECT ID, Name
FROM CTE
WHERE RowNum = 1;

рдпрд╣ рддрд░реАрдХрд╛ SQL Server, MySQL, рдФрд░ PostgreSQL рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдпрд╛ рдЬрдЯрд┐рд▓ рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдк рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди-рд╕рд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рдЦрдирд╛ рд╣реИред

Self-JOIN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдирд╛

рд╕реЗрд▓реНрдл-рдЬреЙрдЗрди рд╕реЗ рдЖрдк рдХрд┐рд╕реА рдЯреЗрдмрд▓ рдХреА рддреБрд▓рдирд╛ рдЙрд╕реА рдЯреЗрдмрд▓ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрдЪреНрдЪрддрд░ ID рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓реНрдл-рдЬреЙрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рд░ рдирд╛рдо рдХреА рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрдЪреЗред

-- Delete duplicate rows using self-join
DELETE c1
FROM customers c1
JOIN customers c2
ON c1.Name = c2.Name AND c1.ID > c2.ID;

рдКрдкрд░ рдХрд╛ рддрд░реАрдХрд╛ SQL Server, MySQL, рдФрд░ PostgreSQL рд╕рд╣рд┐рдд рдкреНрд░рдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдЧреНрд░реАрдЧреЗрдЯ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдФрд░ рдЬреЙрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ Intermediate SQL рдХреЛрд░реНрд╕ рджреЗрдЦреЗрдВред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдХреНрд╡реЗрд░рд┐рдпреЛрдВ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдбрд┐рд▓реАрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддрд░реАрдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред

ROW_NUMBER() рдФрд░ DELETE рдХрд╛ рдЙрдкрдпреЛрдЧ

ROW_NUMBER() рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд╛рд░реНрдЯрд┐рд╢рди рдХреЗ рднреАрддрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИред DELETE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрд▓рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд░реИрдВрдХ рдХрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рддреЗ рд╣реБрдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ MySQL (8.0 рд╕реЗ), PostgreSQL, рдФрд░ SQL Server рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк Name рдХреЙрд▓рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧреНрд░рд╛рд╣рдХ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ (рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ ID) рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

-- Common Table Expression (CTE) to rank rows based on 'Name'
WITH CTE AS (
    SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID ASC) AS RowNum
    FROM customers
)
-- Delete rows from the 'customers' table where the row number is greater than 1
DELETE FROM customers
WHERE ID IN (SELECT ID FROM CTE WHERE RowNum > 1);

рд╕рдмрдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде DELETE рдХрд╛ рдЙрдкрдпреЛрдЧ

рдХрднреА-рдХрднреА, рд╕рдмрдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ DELETE рдСрдкрд░реЗрд╢рди рд╕реЗ рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрд░реАрдХрд╛ MySQL рдпрд╛ PostgreSQL рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд╣рд╛рдБ ROW_NUMBER() рдЙрдкрд▓рдмреНрдз рди рд╣реЛред

рдиреАрдЪреЗ рдХреА рдХреНрд╡реЗрд░реА customers рдЯреЗрдмрд▓ рд╕реЗ рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд┐рд▓реАрдЯ рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХрд╛ ID рд╣рд░ Name рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рд░ рдпреВрдирд┐рдХ Name рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ ID рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рд░рдЦрддреА рд╣реИред

-- Delete rows from the 'customers' table
DELETE FROM customers
WHERE ID NOT IN (
    -- Subquery to find the minimum ID for each unique Name
    SELECT MIN(ID)
    FROM customers
    GROUP BY Name
);

HAVING рдХреНрд▓реЙрдЬрд╝ рдХреЗ рд╕рд╛рде GROUP BY рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрд▓рдореЛрдВ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдЬрд╛рдБрдЪрдиреЗ рд╣реЛрдВ, рддреЛ GROUP BY рдХреЛ HAVING рдХреНрд▓реЙрдЬрд╝ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдЖрдк рджрд┐рдП рдЧрдП рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд┐рд▓реАрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрд░реАрдХрд╛ SQL Server, MySQL, рдФрд░ PostgreSQL рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред

рдиреАрдЪреЗ рдХреА рдХреНрд╡реЗрд░рд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рдкрд╣рдЪрд╛рдирддреА рд╣реИрдВ рдХрд┐ рдХреМрди-рд╕реЗ рдирд╛рдо рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбрд┐рд▓реАрдЯ рдХрд░рддреА рд╣реИрдВ рдФрд░ рд╣рд░ Name рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ ID рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рд░рдЦрддреА рд╣реИрдВред

-- Step 1: Identify which Names have duplicates
SELECT Name, COUNT(*) AS duplicate_count
FROM customers
GROUP BY Name
HAVING COUNT(*) > 1;

-- Step 2: Delete duplicate rows, keeping the smallest ID for each Name
DELETE FROM customers
WHERE ID NOT IN (
    SELECT MIN(ID)
    FROM customers
    GROUP BY Name
);

рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдмреИрдЪ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рд╣реИрдВред рдпрд╣ рддрд░реАрдХрд╛ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдПрдХрд▓ рдХреНрд╡реЗрд░рд┐рдпрд╛рдБ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдиреАрдЪреЗ рдХреА рдХреНрд╡реЗрд░реА рд╣рд░ Name рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо ID рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рд╣реЗрддреБ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдмрдирд╛рддреА рд╣реИ рдФрд░ customers рдЯреЗрдмрд▓ рд╕реЗ рд╡реЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд┐рд▓реАрдЯ рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХрд╛ ID temp_customers рдЯреЗрдмрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

-- Create a temporary table with unique records
CREATE TEMPORARY TABLE temp_customers AS
SELECT MIN(ID) AS KeepID, Name
FROM customers
GROUP BY Name;

-- Delete duplicates not in the temporary table
DELETE FROM customers
WHERE ID NOT IN (SELECT KeepID FROM temp_customers);

-- Clean up
DROP TABLE temp_customers;

рдКрдкрд░ рджрд┐рдпрд╛ CREATE TEMPORARY TABLE рд╡рд╛рд▓рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗрд╡рд▓ MySQL рдФрд░ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред┬а

SQL Server рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдирд╛

SQL Server рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрдирдореЗрдВ INTO рдХреЗ рд╕рд╛рде DISTINCT, ROW_NUMBER(), рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред

INTO рдХреЗ рд╕рд╛рде DISTINCT рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЖрдк SELECT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ DISTINCT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдпреВрдирд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рд▓реА рдПрдХ рдирдИ рдЯреЗрдмрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдирдИ рдЯреЗрдмрд▓ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рдХреЙрд░реНрдб рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдкреБрд░рд╛рдиреА рдЯреЗрдмрд▓ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг customers рдЯреЗрдмрд▓ рд╕реЗ рдпреВрдирд┐рдХ рд░рд┐рдХреЙрд░реНрдб рд▓реЗрдХрд░ unique_customers рдЯреЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИред

-- Select distinct rows from 'customers' and create a new table 'unique_customers'
SELECT DISTINCT *
INTO unique_customers
FROM customers;
-- Drop the original 'customers' table to remove it from the database
DROP TABLE customers;
-- Rename the 'unique_customers' table to 'customers' to replace the original table
EXEC sp_rename 'unique_customers', 'customers';

ROW_NUMBER() рдХрд╛ рдЙрдкрдпреЛрдЧ

рдЖрдк ROW_NUMBER() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА SQL Server рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Customers рдЯреЗрдмрд▓ рдореЗрдВ CustomerName рдХреЙрд▓рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдФрд░ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдореВрд╣ рдореЗрдВ рдкрд╣рд▓реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╛рдХреА рд╕рднреА рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

-- Common Table Expression (CTE) to assign a row number to each customer 
WITH CTE AS (
    SELECT CustomerID, CustomerName, ROW_NUMBER() OVER (PARTITION BY CustomerName ORDER BY CustomerID ASC) AS RowNum
    FROM Customers
)
-- Delete rows from the CTE
DELETE FROM CTE
WHERE RowNum > 1;

рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ

рдХреНрдпреЛрдВрдХрд┐ SQL Server CREATE TEMPORARY TABLE рдХреЛ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рдЖрдк SELECT INTO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред SQL Server рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЧреЗ # рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИред

-- Create a temporary table
SELECT MIN(CustomerID) AS ID, CustomerName
INTO #temp_customers
FROM customers
GROUP BY CustomerName;
-- Delete rows from the 'customers' table where the ID is not in the temporary table
DELETE FROM customers
WHERE CustomerID NOT IN (SELECT ID FROM #temp_customers);
-- Optionally drop the temporary table after use
DROP TABLE #temp_customers;

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдБрдЧрд╛/рджреВрдБрдЧреА рдХрд┐ рд╣рдорд╛рд░реЗ SQL Server Fundamentals рд╕реНрдХрд┐рд▓ рдЯреНрд░реИрдХ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБ рддрд╛рдХрд┐ рдЖрдк рдЯреЗрдмрд▓ рдЬреЙрдЗрди рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреМрд╢рд▓ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХреЗрдВред SQL Server Developer рдХрд░рд┐рдпрд░ рдЯреНрд░реИрдХ рдЖрдкрдХреЛ SQL Server рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡реЗрд░рд┐рдпрд╛рдБ рд▓рд┐рдЦрдиреЗ, рдЯреНрд░рдмрд▓рд╢реВрдЯ рдХрд░рдиреЗ, рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреМрд╢рд▓ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред┬а┬а

рддреНрд╡рд░рд┐рдд рд╕рдВрджрд░реНрдн: SQL рдбрд┐рдбреБрдкреНрд▓реАрдХреЗрд╢рди рддрд░реАрдХреЗ

рдиреАрдЪреЗ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдбрд┐рдбреБрдкреНрд▓реАрдХреЗрд╢рди рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рд╣реА рддрд░реАрдХрд╛ рдЬрд▓реНрджреА рдЪреБрди рд╕рдХреЗрдВред

рддрд░реАрдХрд╛рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпрдХреНрдпрд╛ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ?рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдорд░реНрдерди
SELECT DISTINCTрдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдпреВрдирд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдирд╣реАрдВрд╕рднреА DBMS
GROUP BY + рдПрдЧреНрд░реАрдЧреЗрдЯреНрд╕рдПрдЧреНрд░реАрдЧреЗрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдирд╣реАрдВрд╕рднреА DBMS
ROW_NUMBER() + CTE (SELECT)рдХреНрд╡реЗрд░рд┐рдпреЛрдВ рдореЗрдВ рд▓рдЪреАрд▓рд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧрдирд╣реАрдВSQL Server, MySQL 8.0+, PostgreSQL
ROW_NUMBER() + CTE (DELETE)рд╕реВрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдирд╛рд╣рд╛рдБSQL Server, MySQL 8.0+, PostgreSQL
DELETE рдХреЗ рд╕рд╛рде рд╕рдмрдХреНрд╡реЗрд░реАNOT IN / MIN() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдПрдБрд╣рд╛рдБрд╕рднреА DBMS
Self-JOIN + DELETEрдкреЗрдпрд░рд╡рд╛рдЗрдЬрд╝ рддреБрд▓рдирд╛ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдПрдБрд╣рд╛рдБрд╕рднреА DBMS
рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рддрд░реАрдХрд╛рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧрд╣рд╛рдБMySQL, PostgreSQL (#temp SQL Server рдХреЗ рд▓рд┐рдП)
SELECT DISTINCT INTOрдЯреЗрдмрд▓ рдХреА рд╕реНрд╡рдЪреНрдЫ рдкреНрд░рддрд┐ рдмрдирд╛рдирд╛рд╣рд╛рдБ (рдЯреЗрдмрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд)SQL Server

рд╢реНрд░реЗрд╖реНрда рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИрдВред рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЗрдВрд╕рд░реНрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╢реНрд░реЗрд╖реНрда рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

  • рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХреЙрд▓рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рд░рд┐рдХреЙрд░реНрдб рдпреВрдирд┐рдХ рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рдЯреЗрдмрд▓ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдЖрдиреЗ рд╕реЗ рд░реБрдХрддреЗ рд╣реИрдВред
  • рдпреВрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдХрд┐рд╕реА рднреА рдХреЙрд▓рдо рдкрд░ рдпреВрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдиреЙрди-рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХреЙрд▓рдореЛрдВ (рдЬреИрд╕реЗ рдИрдореЗрд▓ рдПрдбреНрд░реЗрд╕ рдпрд╛ рдлрд╝реЛрди рдирдВрдмрд░) рдореЗрдВ рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рд░рд╣реЗрдВрдЧреЗред
  • рдЙрдЪрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди: рдкреНрд░рднрд╛рд╡реА рд╕реНрдХреАрдорд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рджреЛрд╣рд░рд╛рд╡ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рд╣рд░ рд░рд┐рдХреЙрд░реНрдб рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдмрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред
  • рдпреВрдирд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдпреВрдирд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЖрдк рдХреБрдЫ рдХреЙрд▓рдо рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдкреВрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдЯреЗрдмрд▓-рд╕реНрддрд░реАрдп рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд▓рдЧрд╛рдПред
  • рдирд┐рдпрдорд┐рдд рдбреЗрдЯрд╛ рдСрдбрд┐рдЯ: рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреНрд╡реЗрд░рд┐рдпрд╛рдБ рдЪрд▓рд╛рдХрд░ рдбреЗрдЯрд╛ рдСрдбрд┐рдЯ рдХрд░реЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдбреЗрдЯрд╛ рд╢реБрджреНрдзрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╕рдВрд╢реЛрдзрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдирд╛ рд╣рдореЗрд╢рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реИ, рддрд╛рдХрд┐ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рди рд╣реЛред

рдпрджрд┐ рдЖрдк рдПрдХ рджрдХреНрд╖ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдХреМрд╢рд▓ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ Associate Data Analyst in SQL рдХрд░рд┐рдпрд░ рдЯреНрд░реИрдХ рджреЗрдЦреЗрдВред рдпрджрд┐ рдЖрдк SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Reporting in SQL рдХреЛрд░реНрд╕ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореИрдВ SQL Associate Certification рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛/рдХрд░рддреА рд╣реВрдБ, рддрд╛рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП SQL рдореЗрдВ рдЕрдкрдиреА рдорд╣рд╛рд░рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░реЛрдлреЗрд╢рдирд▓реНрд╕ рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ рджрд┐рдЦреЗрдВред

Allan Ouko

рд▓реЗрдЦрдХ

Allan Ouko

рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕, рдмрд┐рдЬрд╝рдиреЗрд╕ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рддрдХрдиреАрдХреА рд▓реЗрдЦрдХред рдореИрдВ SQL, Python, Power BI, Databricks рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ, рдЙрджреНрдпреЛрдЧ-рдХреЗрдВрджреНрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрддрд╛/рд▓рд┐рдЦрддреА рд╣реВрдБ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдореЗрд░реА рд▓реЗрдЦрдиреА рддрдХрдиреАрдХреА рдЧрд╣рд░рд╛рдИ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмреАрдЪ рдкреБрд▓ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕рдкреВрд░реНрдг рдирд┐рд░реНрдгрдпреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ.┬а

Frequently Asked SQL Questions

SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИрдВ?

SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЧрд▓рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди, рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХрд╛ рдЕрднрд╛рд╡, рдХрдИ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХреАрдХрд░рдг, рдореИрдиреБрдЕрд▓ рдбреЗрдЯрд╛ рдПрдВрдЯреНрд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдБ, рдпрд╛ рдбреЗрдЯрд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡реИрд▓рд┐рдбреЗрд╢рди рд╕рд╣реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛрддрд╛ред

рдХреНрдпрд╛ рдореИрдВ рдХрдИ рдХреЙрд▓рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░реЛрдХ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?

рд╣рд╛рдБ, рдЖрдк рдХрдВрдкреЛрдЬрд╝рд┐рдЯ рдХреА рдпрд╛ рдпреВрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреЗрдХ рдХреЙрд▓рдореЛрдВ рдкрд░ рдпреВрдирд┐рдХрдиреЗрд╕ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдЙрди рдХреЙрд▓рдореЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдпреВрдирд┐рдХ рд░рд╣рддреЗ рд╣реИрдВред

DISTINCT рдХреАрд╡рд░реНрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреИрд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ?

DISTINCT рдХреАрд╡рд░реНрдб рд╕рд┐рд░реНрдл рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдзрд╛рд░рднреВрдд рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреМрди-рд╕рд╛ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?

рдЖрдк ROW_NUMBER() рдХреЗ рд╕рд╛рде DELETE, рд╕рдмрдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде DELETE, GROUP BY рдФрд░ HAVING рдХреНрд▓реЙрдЬрд╝, рддрдерд╛ рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдореЗрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдБ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВтАФрд╕реНрдЯреЛрд░реЗрдЬ рд▓рд╛рдЧрдд рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдХреНрд╡реЗрд░рд┐рдпреЛрдВ рдХреЛ рдзреАрдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред

рдореИрдВ SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреИрд╕реЗ рдвреВрдБрдвреВрдБ?

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП GROUP BY рдХреЗ рд╕рд╛рде HAVING COUNT(*) > 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг: SELECT Name, COUNT(*) FROM customers GROUP BY Name HAVING COUNT(*) > 1; рд╡реЗ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрддреЗ рд╣реИрдВред рдЖрдк ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд░реИрдВрдХ рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВтАФрд░реИрдВрдХ 1 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВред

рдХрд┐рд╕реА рдмрдбрд╝реА SQL рдЯреЗрдмрд▓ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рдмрдбрд╝реА рдЯреЗрдмрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдБ: SELECT DISTINCT рдпрд╛ GROUP BY рд╕реЗ рдпреВрдирд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдмрд▓ рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдореВрд▓ рдЯреЗрдмрд▓ рдХреЛ рдЯреНрд░рдВрдХреЗрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рд╕реНрд╡рдЪреНрдЫ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдЗрдВрд╕рд░реНрдЯ рдХрд░реЗрдВред рдпрд╣ рдкреНрд░рддрд┐-рдкрдВрдХреНрддрд┐ рдбрд┐рд▓реАрдЯ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓рд╛рдЦреЛрдВ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рд░реВрдк рдореЗрдВ, рдЬрдм рдЖрдкрдХреЛ рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛ рдХрд┐ рдХреМрди-рд╕рд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рдЦрдирд╛ рд╣реИ, рддреЛ CTE рдХреЗ рд╕рд╛рде ROW_NUMBER() рдкреНрд░рднрд╛рд╡реА рд╣реИред рд╣рдореЗрд╢рд╛ рдмреИрдХрдЕрдк рд▓реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред

рдореИрдВ SQL рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреИрд╕реЗ рдвреВрдБрдвреВрдБ?

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП GROUP BY рдХреЗ рд╕рд╛рде HAVING COUNT(*) > 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг: SELECT Name, COUNT(*) FROM customers GROUP BY Name HAVING COUNT(*) > 1; рд╡реЗ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрддреЗ рд╣реИрдВред рдЖрдк ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд░реИрдВрдХ рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВтАФрд░реИрдВрдХ 1 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВред

рд╡рд┐рд╖рдп