Tässä artikkelissa tutkitaan SQL Count Distinct -operaattoria poistamiseksi tulosjoukon kaksoiskappaleet.
Kehittäjän on hankittava tietoja SQL-taulukosta, jolla on useita ehtoja. Joskus haluamme saada kaikki taulukon rivit, mutta eliminoida käytettävissä olevat NULL-arvot. Oletetaan, että haluamme saada selkeät asiakastiedot, jotka ovat tehneet tilauksen viime vuonna.
Mennään eteenpäin ja meillä on nopea yleiskatsaus SQL Count -toiminnosta.
SQL Count -toiminto
Käytämme SQL Count aggregate -funktiota saadaksemme rivien määrän tuotos. Oletetaan, että meillä on tuotetaulukko, joka sisältää tiedot kaikista yrityksen myymistä tuotteista. Haluamme tietää viimeisen vuosineljänneksen aikana myytyjen tuotteiden määrän. Voimme käyttää SQL Count -toimintoa palauttamaan määritettyyn ehtoon kuuluvien rivien määrän.
SQL COUNT -funktion syntaksi:
COUNT (lauseke);
Oletuksena SQL Server Count -toiminto käyttää kaikkia avainsanoja. Se tarkoittaa, että SQL Server laskee kaikki tietueet taulukkoon. Se sisältää myös rivit, joilla on myös päällekkäiset arvot.
Luodaan mallitaulukko ja lisätään siihen muutama tietue.
Tässä taulukossa on myös kaksoisarvoja ja NULL-arvoja. .
Seuraavassa kuvakaappauksessa voimme huomata, että:
- Count (* ) sisältää päällekkäiset arvot sekä NULL-arvot
- Count (Col1) sisältää päällekkäiset arvot, mutta ei sisällä NULL-arvoja
Oletetaan, että haluamme tietää taulukossa käytettävissä olevat erilliset arvot. Voimme tehdä niin SQL COUNT DISTINCT: llä.
1
2
|
Valitse määrä (DISTINCT COL1)
joukosta ## TestTable
|
Seuraavassa lähdössä saamme vain 2 riviä. SQL COUNT Distinct ei poista päällekkäisiä ja NULL-arvoja tulosjoukosta.
Katsotaanpa toista esimerkkiä. Tässä esimerkissä meillä on sijaintitaulukko, joka koostuu kahdesta sarakkeesta Kaupunki ja osavaltio.
Suorita seuraava kysely saadaksesi selville erillisen kaupungin lukumäärän taulukosta.
1
2
|
SELECT COUNT (DISTINCT (kaupunki))
sijainnista;
|
Se palauttaa yksilöllisten kaupunkien määrän 2 (Gurgaon ja Jaipur) tulosjoukostamme.
Jos tarkastelemme tietoja, meillä on samanlainen kaupungin nimi eri paikassa valtio samoin. Kaupunkien ja osavaltioiden yhdistelmä on ainutlaatuinen, emmekä halua, että tämä ainutlaatuinen yhdistelmä poistetaan tulosteesta.
Voimme käyttää SQL DISTINCT -funktiota myös sarakkeiden yhdistelmissä. Se tarkistaa arvoyhdistelmän ja poistaa, jos yhdistelmä ei ole ainutlaatuinen.
1
2
|
SELECT DISTINCT Kaupunki, osavaltio
sijainnista;
|
Se ei poista päällekkäisiä kaupunkien nimiä tulosteesta ainutlaatuisen arvoyhdistelmän vuoksi.
Lisätään vielä yksi rivi sijaintitaulukkoon.
1
|
Lisää sijainti-arvoihin (”Gurgaon ”,” Haryana ”)
|
Meillä on 5 tietuetta sijaintitaulukko. Datasta näet, että meillä on yksi kaupungin ja valtion yhdistelmä, joka ei ole ainutlaatuinen.
Suorita SELECT DISTINCT uudelleen funktion, ja sen pitäisi palauttaa vain 4 riviä tällä kertaa.
Emme voi käyttää SQL COUNT DISTINCT -funktiota suoraan useiden sarakkeiden kanssa . Saat seuraavan virhesanoman.
Voimme käyttää väliaikaista taulukkoa hakemaan tietueita SQL DISTINCT -toiminnosta ja käyttää sitten count (*) tarkistaaksesi rivien lukumäärän.
1
2
3
4
|
SELECT DISTINCT Kaupunki, osavaltio
#Temp
sijainnista;
Valitse määrä (*) joukosta #Temp
|
Saamme tulosteen rivien määrän 4.
Jos erottamiseen käytetään sarakkeiden yhdistelmää arvot ja mikä tahansa sarakkeista sisältää NULL-arvoja, siitä tulee myös ainutlaatuinen yhdistelmä SQL Serverille.
Tämän tarkistamiseksi lisätään lisää tietueita sijaintitaulukkoon. Emme määritelleet tilaa tässä kyselyssä.
1
2
|
Lisää sijainti-arvoihin (”Gurgaon”, ””)
Lisää sijainti (kaupunki) -arvoihin (”Gurgaon”)
|
Katsotaanpa sijaintitaulukon tietoja.
Suorita kysely uudelleen saadaksesi erottuva rivit sijaintitaulukosta.
1
2
|
VALITSE erillinen kaupunki, osavaltio
sijainnista;
|
Tuloksessa voidaan nähdä, ettei se poista kaupungin ja valtion yhdistelmä tyhjillä tai NULL-arvoilla.
Vastaavasti näet rivien määrän 6 SQL COUNT: lla DISTINCT-funktio.
Ero SELECT COUNT, COUNT (*) ja SQL COUNT erillisten
COUNT |
Määrä (*) |
Laskuri (erottuva) |
Se palauttaa rivien kokonaismäärän, kun kaikki -lausekkeessa määritellyt ehdot täyttyvät. |
Se palauttaa rivien kokonaismäärän, kun täyttävät missä-lausekkeessa määritellyt ehdot. |
Se palauttaa erillisen määrän rivejä, kun se täyttää missä-lausekkeessa määritellyt ehdot. . |
Se antaa rivien määrän. Se ei poista päällekkäisiä arvoja. |
Se ottaa huomioon kaikki rivit kaksoiskappaleiden NULL-arvoista riippumatta. |
Se antaa erillinen määrä rivejä NULL- ja kaksoisarvojen poistamisen jälkeen. |
Se eliminoi NULL-arvot lähdössä. |
Se ei poista NULL-arvoja lähdössä. |
Se eliminoi NULL-arvot lähdössä. |
SQL Count -toiminnon toteutustapa
Tarkastellaan SQL COUNT DISTINCT -funktion todellista suoritussuunnitelmaa. Sinun on otettava käyttöön Todellinen suoritussuunnitelma SSMS-valikkoriviltä alla olevan kuvan mukaisesti.
Suorita kysely saadaksesi Todellinen toteutussuunnitelma. Tässä suoritussuunnitelmassa näet parhaat resursseja kuluttavat operaattorit:
- Lajittelu (erillinen lajittelu) – Hinta 78%
- Taulukon skannaus – Hinta 22%
Voit viedä hiiren lajitteluoperaattorin päälle ja se avaa työkaluvihjeen, jossa on operaattorin tiedot.
Ominaisuusikkunoissa on myös lisätietoja lajitteluoperaattorista, mukaan lukien muistin allokointi, tilastot ja rivien määrä.
Miljoonaa tietuetta sisältävässä taulukossa SQL Count Distinct saattaa aiheuttaa suorituskykyongelmia, koska erillinen laskentaoperaattori on kallis operaattori todellinen suoritussuunnitelma.
SQL Server 2019 parantaa SQL COUNT DISTINCT -operaattorin suorituskykyä käyttämällä uutta Approx_count_distinct-funktiota. Tämä uusi SQL Server 2019 -toiminto tarjoaa likimääräisen erillisen määrän rivejä. SQL Count erillisessä ja Approx_Count_distinct-funktiotuloksessa voi olla pieni ero.
Voit korvata SQL COUNT DISTINCT -avainsanan Approx_Count_distinct käyttääksesi tätä toimintoa SQL Server 2019: stä.
1
2
|
VALITSE APPROX_COUNT_DISTINCT (kaupunki)
sijainnista;
|
Voit tutkia lisää tästä toiminnosta Uudessa SQL Server 2019 -funktiossa Approx_Count_Distinct.
Päätelmä
Tässä artikkelissa tutkimme SQL COUNT -funktiota useilla esimerkeillä. Käsittelimme myös uuden SQL-toiminnon Approx_Count_distinct, joka on saatavana SQL Server 2019: stä. Ehdotan, että tarkistat ne ympäristösi mukaan. Jos sinulla on kommentteja tai kysymyksiä, jätä ne alla oleviin kommentteihin.
- Kirjoittaja
- Viimeisimmät viestit
Hän on luonut yhden suurimmista ilmaisista online-artikkelikokoelmista yhdestä aiheesta, 50-osaisella sarjallaan SQL Server Always On Availability Groups -ryhmissä. Hänen osuutensa perusteella SQL Server -yhteisöön hänet on tunnustettu useilla palkinnoilla, kuten arvostettu ”Vuoden paras kirjailija” jatkuvasti vuosina 2020 ja 2021 SQLShackissa.
Raj on aina kiinnostunut uusista haasteista, joten jos tarvitset konsultointia apua mistä tahansa hänen kirjoituksissaan käsitellystä aiheesta, hän on tavoitettavissa osoitteessa [email protected]
Näytä kaikki viestit, jotka on kirjoittanut Rajendra Gupta
- Istunnon aikakatkaisut SQL Serverissä aina käytettävissä Ryhmät – 8. helmikuuta 2021
- Pienien ja suurten versioiden päivitykset AWS RDS SQL Serverille – 29. tammikuuta 2021
- AWS RDS PostgreSQL -esiintymien käyttöönotto – 27. tammikuuta 2021