Vypořádat se s duplicitními hodnotami v SQL může být těžkopádný úkol. Ale nebojte se, tento průvodce je zde, aby vám ulehčil.
Data přicházejí ve všech tvarech a formách, ale duplicitní záznamy jsou významnou součástí každého datového formátu. Ať už pracujete s daty z webu nebo jednoduše procházíte nákladem dat o prodeji, vaše analýza bude zkreslená, pokud máte duplicitní hodnoty.
Používáte SQL k drcení vašich čísel a provádění dlouhých dotazů na vaše datové zásobníky? Pokud ano, pak pro vás bude tento průvodce správou duplikátů SQL absolutní radostí.
Zde je několik různých způsobů, jak můžete spravovat duplikáty pomocí SQL.
1. Počítání duplikátů pomocí skupiny podle funkce
SQL je mnohostranný programovací jazyk, který nabízí různé funkce pro zjednodušení výpočtů. Pokud máte bohaté zkušenosti s agregačními funkcemi v SQL, možná už znáte skupina podle funkce a k čemu ji lze použít.
The skupina vytvořená funkce je jednou z nejzákladnější SQL příkazy, což je ideální pro práci s více záznamy, protože můžete použít různé agregační funkce jako
součet, počet, průměrnýa mnoho dalších ve spojení s skupina vytvořená funkce k dosažení odlišné hodnoty po řádcích.V závislosti na scénáři můžete najít duplikáty pomocí skupina vytvořená funkce v rámci jednoho sloupce a více sloupců.
A. Počítejte duplikáty v jednom sloupci
Předpokládejme, že máte následující datovou tabulku se dvěma sloupci: ProductID a Objednávky.
ProductID |
Objednávky |
2 |
7 |
2 |
8 |
2 |
10 |
9 |
6 |
10 |
1 |
10 |
5 |
12 |
5 |
12 |
12 |
12 |
7 |
14 |
1 |
14 |
1 |
47 |
4 |
47 |
4 |
Chcete-li najít duplicitní ID produktů, můžete použít skupina vytvořená funkce a mít klauzule pro filtrování agregovaných hodnot takto:
vybrat produktové číslo, počet(productid) tak jako Celkový součet
z webu sahil.product_dups
skupina podle productid
mající počet (productid) > 1
pořadí podle productid;
Stejně jako u typického příkazu SQL musíte začít definováním sloupců, které chcete zobrazit v konečném výsledku. V tomto případě chceme zobrazit počet duplicitních hodnot v rámci ProductID sloupec.
V prvním segmentu definujte ProductID sloupec uvnitř vybrat prohlášení. The počet funkce následuje ProductID odkaz, aby SQL pochopil účel vašeho dotazu.
Dále definujte zdrojovou tabulku pomocí z doložka. Od té doby počet je agregační funkce, musíte použít skupina vytvořená funkce pro seskupení všech podobných hodnot.
Pamatujte, že cílem je uvést duplicitní hodnoty v rámci ProductID sloupec. Chcete-li tak učinit, musíte filtrovat počet a zobrazit hodnoty, které se ve sloupci vyskytují více než jednou. The mít klauzule filtruje agregovaná data; můžete použít podmínku, tj. počet (productid) >1, pro zobrazení požadovaných výsledků.
Konečně, seřadit podle klauzule seřadí konečné výsledky vzestupně.
Výstup je následující:
b. Počítejte duplikáty ve více sloupcích
Pokud chcete počítat duplikáty ve více sloupcích, ale nechcete psát více SQL dotazů, můžete výše uvedený kód rozšířit pomocí několika vylepšení. Pokud například chcete zobrazit duplicitní řádky ve více sloupcích, můžete použít následující kód:
vybrat productid, objednávky, počet(*) tak jako Celkový součet
z webu sahil.product_dups
skupina podle productid, objednávky
mající počet (productid) > 1
pořadí podle productid;
Ve výstupu si všimnete, že jsou zobrazeny pouze dva řádky. Když vyladíte dotaz a přidáte odkaz na oba sloupce v rámci vybrat získáte počet odpovídajících řádků s duplicitními hodnotami.
Místo toho počítat (sloupec) funkce, musíte projít počet(*) funkce pro získání duplicitních řádků. The * funkce přepíná všechny řádky a hledá duplicitní řádky místo jednotlivých duplicitních hodnot.
Výstup je zobrazen níže:
Zobrazí se odpovídající řádky s ID produktu 14 a 47, protože hodnoty objednávky jsou stejné.
2. Označování duplikátů pomocí funkce row_number().
Zatímco skupina vytvořená a mít kombinace je nejjednodušší způsob, jak najít a označit duplikáty v tabulce, existuje alternativní způsob, jak najít duplikáty pomocí row_number() funkce. The row_number() funkce je součástí Funkce okna SQL kategorie a je nezbytný pro efektivní zpracování vašich dotazů.
Zde je návod, jak můžete označit duplikáty pomocí row_number() funkce:
vybrat productid, objednávky,
row_number() over (partition by productid order by productid) as sno
z sahil.product_dups;
The row_number() Funkce pročesává každou hodnotu ID produktu a přizpůsobuje počet opakování pro každé ID. The rozdělit klíčové slovo odděluje duplicitní hodnoty a přiřazuje hodnoty chronologicky, například 1, 2, 3 atd.
Pokud nepoužíváte rozdělit klíčové slovo, budete mít jedinečné sériové číslo pro všechna ID produktů, což nebude vyhovovat vašemu účelu.
The seřadit podle klauzule v sekci oddílu je funkční při definování pořadí řazení. Můžete si vybrat mezi vzestupným (výchozí) a sestupným pořadím.
Nakonec můžete sloupci přiřadit alias, aby bylo možné později filtrovat (v případě potřeby).
3. Odstranění duplicitních řádků z tabulky SQL
Vzhledem k tomu, že duplicitní hodnoty v tabulce mohou zkreslit vaši analýzu, je často nutné je odstranit během fáze čištění dat. SQL je cenný jazyk, který nabízí způsoby, jak efektivně sledovat a odstraňovat duplicitní hodnoty.
A. Použití odlišného klíčového slova
The odlišný klíčové slovo je pravděpodobně nejběžnější a nejčastěji používanou funkcí SQL k odstranění duplicitních hodnot v tabulce. Můžete odstranit duplikáty z jednoho sloupce nebo dokonce duplicitní řádky najednou.
Zde je návod, jak odstranit duplikáty z jednoho sloupce:
vybratodlišný productid z sahil.product_dups;
Výstup vrátí seznam všech jedinečných ID produktů z tabulky.
Chcete-li odstranit duplicitní řádky, můžete výše uvedený kód upravit takto:
vybratodlišný * z sahil.product_dups;
Výstup vrátí seznam všech jedinečných řádků z tabulky. Při pohledu na výstup si všimnete, že ID produktu 14 a 47 se v tabulce konečných výsledků objeví pouze jednou.
b. Použití metody Common Table Expression (CTE).
Metoda Common Table Expression (CTE) se mírně liší od běžného kódu SQL. CTE jsou podobné Dočasné tabulky SQL, pouze s tím rozdílem, že jsou virtuální, na které se můžete odkazovat pouze během provádění dotazu.
Největší výhodou je, že pro pozdější zrušení těchto tabulek nemusíte zadávat samostatný dotaz, protože přestanou existovat, jakmile se dotaz spustí. Pomocí metody CTE můžete pomocí níže uvedeného kódu najít a odstranit duplikáty.
s cteprodukty tak jako
(vybrat productid, objednávky,
row_number() over (partition by productid order by productid) as sno
ze sahil.product_dups)
vybrat * z cteprodukty
kde sno = 1;
Funkci CTE můžete vyvolat pomocí s klíčové slovo; definujte název dočasné virtuální tabulky za s klíčové slovo. Odkaz na tabulku CTE je užitečný při filtrování hodnot tabulky.
V další části přiřaďte čísla řádků svým ID produktů pomocí row_number() funkce. Protože na každé ID produktu odkazujete s a rozdělit funkce, každé opakované ID má odlišnou hodnotu.
Nakonec nově vytvořené filtrujte sno sloupec v posledním segmentu s jiným vybrat prohlášení. Nastavte tento filtr na 1, abyste získali jedinečné hodnoty v konečném výstupu.
Naučte se používat SQL snadným způsobem
O SQL a jeho variantách se začalo mluvit ve městě díky jeho vrozené schopnosti dotazovat se a používat relační databáze. Od psaní jednoduchých dotazů až po provádění propracovaných analýz s dílčími dotazy, tento jazyk má od všeho trochu.
Než však napíšete jakékoli dotazy, musíte zdokonalit své dovednosti a prolomit kódy, abyste se stali zdatnými kodéry. SQL se můžete naučit zábavnou formou implementací svých znalostí ve hrách. Naučte se některé efektní nuance kódování tím, že do svého kódu přidáte trochu zábavy.