Det kan være en besværlig opgave at håndtere duplikerede værdier i SQL. Men frygt ikke, denne guide er her for at lette din byrde.
Data kommer i alle former og former, men duplikerede poster er en fremtrædende del af hvert dataformat. Uanset om du beskæftiger dig med webbaserede data eller blot navigerer gennem en lastbil af salgsdata, vil din analyse blive skæv, hvis du har duplikerede værdier.
Bruger du SQL til at knuse dine tal og udføre lange forespørgsler på dine datastakke? Hvis ja, så vil denne guide til håndtering af SQL-duplikater være en absolut fornøjelse for dig.
Her er et par forskellige måder, du kan bruge til at administrere dubletter ved hjælp af SQL.
1. Optælling af dubletter ved hjælp af grupper efter funktion
SQL er et mangefacetteret programmeringssprog, der tilbyder forskellige funktioner til at forenkle beregninger. Hvis du har masser af erfaring med aggregeringsfunktionerne i SQL, er du måske allerede bekendt med gruppe for funktion og hvad det kan bruges til.
Det gruppe efter
funktion er en af de mest grundlæggende SQL-kommandoer, som er ideel til at håndtere flere poster, da du kan bruge forskellige aggregerede funktioner som f.eks sum, tælle, gennemsnit, og mange andre i forbindelse med gruppe efter funktion for at nå frem til en distinkt rækkevis værdi.Afhængigt af scenariet kan du finde dubletter med gruppe efter funktion inden for en enkelt kolonne og flere kolonner.
en. Tæl dubletter i en enkelt kolonne
Antag, at du har følgende datatabel med to kolonner: ProduktID og Ordre:% s.
ProduktID |
Ordre:% s |
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 |
For at finde dublerede produkt-id'er kan du bruge gruppe efter funktion og at have klausul for at filtrere de aggregerede værdier, som følger:
Vælg produktid, tælle(produktid) som Total_antal
fra sahil.product_dups
gruppe efter produktid
har tæller (productid) > 1
ordre efter produktid;
Som med en typisk SQL-sætning skal du starte med at definere de kolonner, du vil have vist i det endelige resultat. I dette tilfælde ønsker vi at vise antallet af duplikerede værdier inden for ProduktID kolonne.
I det første segment skal du definere ProduktID kolonne inden for Vælg udmelding. Det tælle funktionen følger ProduktID reference, så SQL forstår formålet med din forespørgsel.
Dernæst skal du definere kildetabellen ved hjælp af fra klausul. Siden tælle er en aggregeringsfunktion, skal du bruge gruppe efter funktion til at gruppere alle de lignende værdier.
Husk, ideen er at liste de duplikerede værdier inden for ProduktID kolonne. For at gøre det skal du filtrere antallet og vise værdier, der forekommer mere end én gang i kolonnen. Det at have klausul filtrerer de aggregerede data; du kan bruge betingelsen, dvs. antal (productid) >1, for at vise de ønskede resultater.
Endelig, den bestil efter klausul sorterer de endelige resultater i stigende rækkefølge.
Udgangen er som følger:
b. Tæl dubletter i flere kolonner
Når du vil tælle dubletter i flere kolonner, men ikke ønsker at skrive flere SQL-forespørgsler, kan du udvide ovenstående kode med et par justeringer. Hvis du f.eks. vil vise dublerede rækker i flere kolonner, kan du bruge følgende kode:
Vælg produktid, ordrer, tælle(*) som Total_antal
fra sahil.product_dups
grupper efter produktid, ordrer
har tæller (productid) > 1
ordre efter produktid;
I outputtet vil du bemærke, at der kun vises to rækker. Når du justerer forespørgslen og tilføjer referencen til begge kolonner i Vælg sætning, får du et antal matchende rækker med duplikerede værdier.
I stedet for tælle (kolonne) funktion, skal du bestå tælle(*) funktion for at få duplikerede rækker. Det * funktion skifter gennem alle rækker og leder efter duplikerede rækker i stedet for individuelle duplikerede værdier.
Udgangen er vist nedenfor:
De tilsvarende rækker med produkt-id 14 og 47 vises, da ordreværdierne er de samme.
2. Markering af dubletter med row_number() funktion
Mens gruppe efter og at have kombination er den nemmeste måde at finde og markere dubletter i en tabel, der er en alternativ måde at finde dubletter ved at bruge rækkenummer() fungere. Det rækkenummer() funktion er en del af SQL vinduesfunktioner kategori og er afgørende for effektiv behandling af dine forespørgsler.
Sådan kan du markere dubletter ved hjælp af rækkenummer() fungere:
Vælg produktid, ordrer,
row_number() over (partition efter produkt-id rækkefølge efter produkt-id) som sno
fra sahil.product_dups;
Det rækkenummer() funktion gennemgår hver produkt-id-værdi og assimilerer antallet af gentagelser for hvert id. Det skillevæg nøgleordet adskiller de duplikerede værdier og tildeler værdier kronologisk, såsom 1, 2, 3 og så videre.
Hvis du ikke bruger skillevæg søgeord, vil du have et unikt serienummer for alle produkt-id'er, som ikke passer til dit formål.
Det bestil efter klausul i partitionssektionen er funktionel, når sorteringsrækkefølgen defineres. Du kan vælge mellem stigende (standard) og faldende rækkefølge.
Endelig kan du tildele et alias til kolonnen for at gøre det nemmere at filtrere senere (hvis påkrævet).
3. Sletning af duplikerede rækker fra en SQL-tabel
Da duplikerede værdier i en tabel kan skævvride din analyse, er det ofte bydende nødvendigt at eliminere dem under datarensningsfasen. SQL er et værdifuldt sprog, der tilbyder måder at spore og slette dine duplikerede værdier effektivt.
en. Brug af det særskilte søgeord
Det distinkt nøgleord er sandsynligvis den mest almindelige og hyppigt anvendte SQL-funktion til at fjerne duplikerede værdier i en tabel. Du kan fjerne dubletter fra en enkelt kolonne eller endda dublere rækker på én gang.
Sådan fjerner du dubletter fra en enkelt kolonne:
Vælgdistinkt produktid fra sahil.product_dups;
Outputtet returnerer en liste over alle unikke produkt-id'er fra tabellen.
For at fjerne duplikerede rækker kan du justere ovenstående kode som følger:
Vælgdistinkt * fra sahil.product_dups;
Outputtet returnerer en liste over alle unikke rækker fra tabellen. Når du ser på outputtet, vil du bemærke, at produkt-id'erne 14 og 47 kun vises én gang i den endelige resultattabel.
b. Brug af Common Table Expression-metoden (CTE).
Common Table Expression-metoden (CTE) adskiller sig lidt fra den almindelige SQL-kode. CTE'er ligner SQLs midlertidige tabeller, med den eneste forskel, at de er virtuelle, som du kun kan referere til under forespørgslens udførelse.
Den største fordel er, at du ikke behøver at sende en separat forespørgsel for at droppe disse tabeller senere, da de ophører med at eksistere, så snart forespørgslen udføres. Ved at bruge CTE-metoden kan du bruge koden nedenfor til at finde og slette dubletter.
med cteprodukter som
(Vælg produktid, ordrer,
row_number() over (partition efter produkt-id rækkefølge efter produkt-id) som sno
fra sahil.product_dups)
Vælg * fra cteprodukter
hvor sno = 1;
Du kan aktivere CTE-funktionen ved at bruge med søgeord; definere navnet på den midlertidige virtuelle tabel efter med søgeord. CTE-tabelreferencen er nyttig under filtrering af tabellens værdier.
I den næste del skal du tildele rækkenumre til dine produkt-id'er ved hjælp af rækkenummer() fungere. Da du refererer til hvert produkt-id med et skillevæg funktion, har hvert tilbagevendende ID en særskilt værdi.
Filtrer til sidst det nyoprettede sno kolonne i det sidste segment med en anden Vælg udmelding. Indstil dette filter til 1 for at opnå unikke værdier i det endelige output.
Lær at bruge SQL på den nemme måde
SQL og dens varianter er blevet tale om byen, med dens medfødte evne til at forespørge og bruge relationelle databaser. Fra at skrive simple forespørgsler til at udføre omfattende analyser med underforespørgsler, dette sprog har lidt af hvert.
Men før du skriver nogen forespørgsler, skal du finpudse dine færdigheder og komme i gang med koderne for at gøre dig selv til en dygtig koder. Du kan lære SQL på en sjov måde ved at implementere din viden i spil. Lær nogle smarte kodningsnuancer ved at tilføje lidt sjov til din kode.