Når du jobber med MySQL-database vil du ofte ha tilfeller der du ønsker å filtrere verdiene. Selv om du kan bruke WHERE-klausulen, fungerer det ikke alltid for alle forekomster. HAVING-leddet brukes når du vil utføre en filterspørring ved å bruke en aggregert funksjon og bruke grupperingene.
HAVING-leddet er avhengig av GROUP BY-leddet i filteret og utfører spørringen basert på den angitte betingelsen. Den begrenser filteret basert på betingelsen og returnerer bare de valgte gruppene hvis de oppfyller betingelsen. Vi har eksempler på bruk av MySQL HAVING-klausulen der summen overskrider terskelen. På den måten vil du mestre hvordan du bruker det på slutten av dagens innlegg.
Hvordan bruke MySQL HAVING-klausulen der summen er større enn terskelen
Du bruker MySQL HAVING-klausulen med GROUP BY-klausulen. Syntaksen er som følger:
SELECT expression1, .. expression_n, aggregate_func (uttrykk) FRA tabellnavn GRUPPE VED uttrykk som HAR
Du kan bruke de forskjellige aggregatfunksjonene, inkludert SUM(), COUNT(), MIN(), MAX() og AVG(). Merk at ethvert uttrykk som ikke brukes med aggregeringsfunksjonen må nevnes med GROUP BY-leddet.
Når det gjelder betingelsen, brukes den på de aggregerte resultatene der du spesifiserer terskelen du vil kontrollere med betingelsen. Du kan for eksempel bruke SUM()-funksjonen og verifisere om uttrykket oppfyller en terskel på 10. Vi vil forstå mer om det i de gitte eksemplene.
For å forstå hvordan HAVING-klausulen fungerer, la oss lage en eksempeldatabase som vi skal jobbe med. Vi navngir databasen vår som 'register.'
La oss også lage en tabell kalt 'arbeidere' for å inneholde våre forskjellige kolonner og datatyper. Her jobber vi med arbeidernes data som navn, timer, arbeidsdato osv.
Ved å sjekke beskrivelsen av tabellen vår kan vi bekrefte at alle kolonner er opprettet.
Vi setter inn verdiene i tabellen vår. Vi har forskjellige arbeidere som jobber på forskjellige tider og dager. Ved å bruke disse dataene kan vi bruke HAVING-klausulen der summen overskrider terskelen.
For vårt første eksempel, la oss vurdere et tilfelle der vi ønsker å finne arbeiderne som jobbet flest timer. For HAVING-leddet, inkluderer summen av aggregert funksjon for timer. I GROUP BY-leddet grupperer vi radene ved å bruke navneraden for å hjelpe til med å klassifisere arbeiderne med totalt antall timer som er større enn terskelen.
Hvis vi har terskel for totalt antall timer som 7, utfører vi kommandoen vår som følger:
VELG navn, SUM(timer) AS total_hours_per_person FRA arbeidere GRUPPE ETTER navn HAR sum(timer) > 7;Ved å utføre kommandoen får vi en utgang som inneholder to rader siden bare to arbeidere overskred terskelen som er spesifisert i HAVING-leddet.
Anta at vi ønsker å klassifisere avdelingene for å se de med arbeidere som jobber i timer over en terskel på 7 timer. Vi velger avdelingen, bruker deretter SUM-aggregatfunksjonen med timene og grupperer radene ved hjelp av avdelingsuttrykket.
Vår kommando er som følger:
VELG avdeling, SUM(timer) AS total_timer_per_avdeling FRA arbeidere GRUPPE FOR avdeling SOM HAR sum(timer) > 7;Fra resultatene kan vi bekrefte at vi klarte å filtrere radene for å bare la de ha en sum av timene høyere enn terskelen vår.
På samme måte, hvis vi ønsker å filtrere arbeidsdatoen med det høyeste antallet arbeidende arbeidere til å overskride en terskel på 10 timer, velger vi arbeidsdatouttrykket. Deretter bruker vi SUM-funksjonen med timene og grupperer radene ved å bruke arbeidsdatoen.
Kommandoen er som følger:
VELG arbeidsdato, SUM(timer) SOM høyeste_timer_arbeidet FRA arbeidere GRUPPE ETTER arbeidsdato HAR sum(timer) > 10;Etter å ha utført kommandoen, viser resultatene at bare én arbeidsdato har summen av totale timer som overskrider terskelen:
Konklusjon
MySQL HAVING-klausulen brukes når du ønsker å utføre en filterspørring ved hjelp av en aggregert funksjon. Den er kombinert med GROUP BY-leddet for å utføre en mer spesifikk spørring. Dette innlegget beskrev alt om MySQL HAVING-klausulen der summen er større enn terskelen. Med de medfølgende eksemplene forstår du nå hvordan du arbeider med MySQL HAVING-klausulen.