Juster id-verdien fra de forrige verdiene. Velge og oppdatere rader på én gang – SQL_CALC_FOUND_ROWS. Pobudova-beregningsfelt

Hvem finner du ut av hvordan du blir vikorist? COUNT funksjon i SQL Server (Transact-SQL) med syntaks og applikasjoner.

Beskrivelse

I SQL Server (Transact-SQL) COUNT funksjon roterer et antall rader i et felt for å danne et resultatsett.

Syntaks

Syntaksen for COUNT-funksjonen i SQL Server (Transact-SQL):

ABO-syntaks for COUNT-funksjonen når du grupperer resultatene av ett eller flere utsagn:

Parameteri chi argumenti

uttrykk1 , uttrykk2 , … uttrykk_n
Uttrykk som ikke er inkludert i COUNT-funksjonen kan inkluderes før GROUP BY-leddet, for eksempel en SQL-ledd.
aggregate_expression - dette er tilfellet eller uttrykket hvis NULL-verdier ikke vil bli støttet.
tabeller — tabeller som poster må hentes for. Selv om det bare er én tabell, omorganiseres den i FROM-setningen.
WHERE-forhold – strengt tatt. Vær oppmerksom på at du må lagre for de valgte oppføringene.

Ikke en NULL-verdi

Ikke alle forstår, men COUNT-funksjonen i viktige poster hvor verdien definert i COUNT (aggregatuttrykk) ikke er lik NULL. Hvis du skriver inn NULL-verdier, vil den ikke slå seg på før COUNT klareres.

La oss se på et eksempel på COUNT-funksjonen, som viser hvordan NULL-verdier blir evaluert av COUNT-funksjonen.

Hvis du for eksempel har en tabell som heter markeder:

Dette COUNT-tallet er 3, så alle market_id-verdier i resultatsettet er IKKE NULL.

Men hvis du kjører den neste SELECT-setningen, som er en erstatning for COUNT-funksjonen:

Transact-SQL

VELG ANTALL(filials) FRA markeder; --Resultat: 1

Denne butt COUNT vil bli rotert til 1, så bare én verdi av filialene i resultatsettet vil bli skrevet NOT NULL. Hvis dette er den første raden, vil filials=yes bli indikert. Dette er en enkelt rad som inkluderes før COUNT-funksjonen beregnes.

Zastosuvannya

COUNT-funksjonen kan endres i nyere versjoner av SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Eksempel med ett felt

La oss se på hvordan du bruker SQL Server COUNT-funksjonen for å forstå hvordan du bruker COUNT-funksjonen i SQL Server (Transact-SQL).

Du kan for eksempel finne ut hvor mange kontakter du har med etternavn = Rasputin.

I denne applikasjonen er COUNT-funksjonen spesifisert med COUNT (*)-aliaset Antall kontakter. Derfor vises "Antall kontakter" i resultatsettet som navnet på feltet.

Eksempel fra Wikoristanny DISTINCT

Du kan bruke DISTINCT-operatoren i COUNT-funksjonen. For eksempel roterer følgende SQL-setning antallet unike avdelinger, selv om en av dem har fornavn = 'Samvel'.

For å bestemme antall poster i en MySQL-tabell, må du bruke den spesielle COUNT()-funksjonen.

COUNT()-funksjonen roterer antall poster i en tabell som oppfyller et gitt kriterium.

COUNT(expr)-funksjonen tar alltid hensyn til de radene der resultatet av expr IKKE er NULL.

Problemet med denne regelen er at COUNT()-funksjonen bruker en stjerne som argument - COUNT(*) . I dette tilfellet vurderes alle rader, uavhengig av om de er NULL eller IKKE NULL.

For eksempel roterer funksjonen COUNT(*) det totale antallet poster i en tabell:

VELG ANTALL(*) FRA tabellnavn

Hvordan lagre et stort antall poster og vise dem på skjermen

Eksempel på PHP+MySQL-kode for oppdatering og visning av antall rader:

$res = mysql_query("VELG ANTALL(*) FRA tabellnavn") $rad = mysql_fetch_row($res); $total = $rad; // totale poster echo $ total; ?>

Dette eksemplet illustrerer den enkleste versjonen av COUNT()-funksjonen. Alternativt kan andre innstillinger legges til denne funksjonen.

Etter å ha spesifisert en tabellkolonne som en parameter, roterer COUNT(column_name)-funksjonen antall poster i den kolonnen for å erstatte NULL-verdien. Poster med NULL-verdier ignoreres.

VELG ANTALL(kolonnenavn) FRA tabellnavn

Det er ikke mulig å bruke mysql_num_rows() funksjonen, så for å finne ut hvor mange poster det er, må du skrive inn SELECT * FROM db for å velge alle postene, men det er bedre å bruke tellefunksjonen .

$result = mysql_query("VELG ANTALL(*) som rec FROM db");

Nyttige funksjoner til COUNT() i applikasjonen

Aksen er en annen del av COUNT() funksjonen. Det er mulig at det finnes en tabellis med en katalog over frost, som inneholder kategoriidentifikatoren og navnet på frosten.

VILICHENNYA

Veskefunksjoner

I SQL-spørringsversjoner er det ofte nødvendig å redigere dataene på forhånd. Med denne metoden analyseres spesielle funksjoner og uttrykk.

Det er ofte nødvendig å finne ut hvor mange poster som tilsvarer et bestemt søk,Hva er verdien av en numerisk kolonne, dens maksimums-, minimums- og gjennomsnittsverdi. Og dette fungerer som en underpose (statistisk, aggregert) funksjon. Podbag-funksjoner prosesssett med poster, oppgaver, for eksempel HVOR. Hvis du inkluderer dem før listen over elementer som følger SELECT-setningen, kan den resulterende tabellen brukes som et undersett av databasetabellen og verdiene beregnet ved hjelp av disse funksjonene. Langt borteliste over veskefunksjoner.

  • COUNT (parameter ) Roterer antall oppføringer som er tilordnet parameteren. Hvis du trenger å hente en rekke eksisterende oppføringer, skriv inn stjernesymbolet (*) som sporingsparameter. Hvis du angir oppføringsnavnet i parameteren, roterer funksjonen antallet oppføringer som har samme verdi som NULL. For å bestemme hvor mange forskjellige verdier som skal kombineres, skriv inn DISTINCT-nøkkelordet før spornavnene. For eksempel:

VELG ANTALL(*) FRA klienter;

VELG ANTALL(Beløp) FRA klienter;

SELECT COUNT(DISTINCT Payment_amount) FROM Clients;

Det neste trinnet vil bli tatt for å informere deg om endringene:

SELECT Region , COUNT(*) FROM Clients ;

  • SUM (parameter ) Roterer mengden av verdien spesifisert i kolonneparameteren. Parameteren kan endres for å fjerne navnet på elementet. For eksempel:

VELG SUM (Sum_zamovlennya) FRA klienter;

Dette SQL-viruset roterer en tabell som består av én kolonne og én post og plasserer summen av alle gjeldende verdier i Total_Amount-kolonnen i klienttabellen.

La oss anta at utdatatabellen har verdien av Order_Amount uttrykt i rubler, men vi må beregne det totale beløpet i dollar. Hvis gjeldende valutakurs er den samme som 27,8, for eksempel, kan du få ønsket resultat ved å bruke følgende formel:

VELG SUM (Sum_zamovlennya*27.8) FRA klienter;

  • AVG (parameter ) Roterer det aritmetiske gjennomsnittet av alle verdiene spesifisert i kolonneparameteren. Parameteren kan endres for å hevne brukerens navn. For eksempel:

VELG AVG (Amount_amount) FRA klienter;

VELG AVG (Amount_amount*27.8) FRA klienter

HVOR Region<>"Pivnichno-3west";

  • MAX (parameter ) Roterer maksimumsverdien i kolonnen spesifisert i parameteren. Parameteren kan også brukes til å motvirke situasjonen. For eksempel:

VELG MAX(Amount_of_purchase) FROM Clients;

VELG MAKS(Amount_amount*27,8) FRA klienter

HVOR Region<>"Pivnichno-3west";

  • MIN (parameter ) Roterer minimumsverdien i kolonnen angitt i parameteren. Parameteren kan endres for å hevne brukerens navn. For eksempel:

SELECT MIN(Amount_amount) FROM Clients;

VELG MIN (Beløp___*27,8) FRA klienter

HVOR Region<>"Pivnichno-3west";

Faktisk er det ofte nødvendig å åpne undertabellen for å vise total-, gjennomsnitts-, maksimums- og minimumsverdier for numeriske kolonner. For dette formålet, velg grupperingen (GROUP BY) og underfunksjonene.

VELG region, SUM (Sum_zamovlennya) FRA klienter

GRUPPE ETTER Region;

Resultatet er en tabell der du kan legge inn navn på regioner og subsummene for å tiltrekke alle kunder fra visse regioner (fig. 5).

La oss nå ta en titt på utvinningen av alle posedata for regionene:

VELG region, SUM, AVG (Sum_zamovlennya), MAX (Suma_zamovlennya), MIN (Money_amount)

FRA klienter

GRUPPE ETTER Region;

Resultatet er vist i tabellen vist i fig. 8. I applikasjonen har Output-West-regionen av visninger i utdatatabellen mer enn én post. Også i resultattabellen gir ulike underfunksjoner ulike verdier.

Liten 8. Pidsumkova tabell over summen av transaksjoner etter region

Når underordnede funksjoner er valgt i listen over kolonner i SELECT-setningen, ser overskriftene til de tilsvarende kolonnene i den resulterende tabellen ut som Expr1001, Expr1002, etc. (eller noe lignende avhenger av implementeringen av SQL). Beskytt overskrifter for betydningen av underfunksjoner og andre funksjoner kan settes etter eget skjønn. For dette formålet, etter setningen i SELECT-setningen, skriv inn følgende uttrykk:

AS header_stovptsya

Nøkkelordet AS (yak) betyr at resultattabellen har en underseksjon som er ansvarlig for overskriften som legges inn etter AS. Tittelen som tildeles kalles også et pseudonym. I applikasjonen (fig. 9) er aliaser spesifisert for alle punktene som telles:

VELG region,

SUM (Sum_zamovlennya) AS [Zagalna sum_zamovlennya],

AVG (Sum_zamovlennya) AS [Average sum_zamovlennya],

MAX(Amount_of_order) AS Maximum,

MIN (Sum_zamovlennya) AS Minimum,

FRA klienter

GRUPPE ETTER Region;

Liten 9. Podsumkova tabell over summer av transaksjoner etter region fra statusen til selskapets pseudonymer

Pseudonymer, som består av mange ord, atskilt med mellomrom, ligger nær firkantede armer.

Underfunksjoner kan brukes i SELECT- og HAVING-klausuler, men de kan ikke brukes i WHERE-klausuler. HAVING-operatoren ligner på WHERE-operatoren, bortsett fra at den velger poster i grupper når den er underordnet WHERE.

Det er mulig du må finne ut hvilke regioner som har mer enn én klient. Denne metoden kan oppsummeres med følgende setning:

SELECT Region , Count(*)

FRA klienter

GRUPPER ETTER Region SOM HAR ANTALL(*) > 1;

Verdibehandlingsfunksjoner

Når du arbeider med data, må du ofte behandle dem (omorganisere dem til ønsket form): se raden på rad, fjern ledningene og avslutningshullene, rund tallet, beregn kvadratroten og beregn den nøyaktige timen. SQL har tre typer funksjoner:

  • radfunksjoner;
  • numeriske funksjoner;
  • dato-time funksjoner.

Radfunksjoner

Radfunksjoner tar en radparameter og roterer raden til NULL etter behandling.

  • SUBSTRING (rekke FRA cob)Roterer ordren for å avslutte ladingen, som er indikert som en parameter rad. Kontrakt begynner med symbolet, serienummeret til hver indikasjon i cob-parameteren, og slutter med dovzhin spesifisert i dozhina-parameteren. Nummereringen av symbolene i raden utføres venstrehendt, med start fra 1. De firkantede armene her indikerer bare de som ikke er enkel plassering i dem. Yaksho viraz FOR Dovzhin snur seg ikke, så roterer den på rad kolbe og til slutten av utgangsraden. Parameterverdier cob og dovzhina Du må velge slik at raden du leter etter er effektivt i midten av utgangsraden. Ellers returnerer SUBSTRING-funksjonen NULL.

For eksempel:

SUBSTRING ("Kjære Masha!" FRA 9 FOR 4) Blir "Masha";

SUBSTRING ("Kjære Masha!" FRA 9) Blir "Masha!";

SUBSTRING("Kjære Masha!" FRA 15) Roterer NULL.

Du kan bruke denne funksjonen i SQL-uttrykk, for eksempel:

VELG * FRA klienter

WHERE SUBSTRING(Region FRA 1 FOR 5) = "Pivnich";

  • ØVRE (rad ) ¦ oversett alle tegn som er spesifisert i radparameteren til store bokstaver.
  • NEDRE (rad ) konverter alle tegn som er spesifisert i radparameteren til små bokstaver.
  • TRIM (LEADING | TRAILING | BEGGE ["symbol"] FRA rad ) viser ledende (LEADING), etterfølgende (TRAILING) eller andre (BEGGE) ladesymboler. Bak kampanjesymbolet som vises er et mellomrom (" "), som kanskje ikke er indikert. Oftest brukes denne funksjonen til å rydde rydninger.

For eksempel:

TRIM (LEDER "" FRA "byen St. Petersburg") omslutter "byen St. Petersburg";

TRIM (TRALING "FRA "byen St. Petersburg") roterer "stedet for St. Petersburg";

TRIM (BÅDE ""FRA" sted St. Petersburg") blir til "sted St. Petersburg";

TRIM(BEDE FRA "byen Saint Petersburg") roterer "byen Saint Petersburg";

TRIM(BÅDE "g" FRA "byen St. Petersburg") blir til "familien til St. Petersburg".

Blant disse funksjonene er de mest brukte SUBSTRING() og TRIM().

Numeriske funksjoner

Numeriske funksjoner, som parametere, kan akseptere data av en numerisk type, men i stedet rotere tallet NULL (uverdiverdi).

  • POSISJON ( hel rad I rad) ¦ ser etter oppføringen av målraden i radverdiene. Hvis søket er vellykket, roterer funksjonen posisjonsnummeret til det første tegnet, ellers 0. Hvis hele raden har en nulldobling (for eksempel raden " "), roterer funksjonen 1. Hvis du vil ha en av parametere for å ha en NULL-verdi, og roter deretter Det er NULL. Nummerering av radsymboler gjøres med venstrehånd, fra 1.

For eksempel:

POSISJON ("e" I "Hei alle sammen") Roter 5;

POSISJON ("alle" I "Hei alle sammen") roter 8;

POSITION ("Hei alle sammen") roter 1;

POSITION("Hei!" I "Hei alle sammen") Roterer 0.

Klienttabellen (div. Fig. 1) har Adresser-delen, ved siden av stedets navn, postnummer, gatenavn og andre data. Du må kanskje velge poster om klienter som utsetter. Så hvis du trenger å velge poster for klienter som bor i St. Petersburg, kan du raskt bruke følgende SQL-spørring:

VELG * FRA klienter

HVOR POSISJON ("St. Petersburg" IN-adresser) > 0;

Kjære, dette enkle spørsmålet om datavalg kan formuleres annerledes:

VELG * FRA klienter

WHERE-adresser SOM "% Petersburg %";

  • UTTREKK (parameter ) ¦ trekker ut et element fra en verdi av dato-time-typen eller fra et intervall. For eksempel:

UTTREKK (MÅNED FRA DATO "2005-10-25") fyller 10.

  • CHARACTER_LENGTH (rad ) Roterer antall tegn på rad.

For eksempel:

CHARACTER_LENGTH("Hei alle sammen") Fyller 11 år.

  • OCTET_LENGTH (rad ) Roterer antall oktetter (byte) i en rad. Et latinsk eller kyrillisk tegn er representert med én byte, og et kinesisk tegn er representert med to byte.
  • KARDINALITET (parameter ) tar en samling av elementer som en parameter og roterer antall elementer i samlingen (kardinalnummer). En samling kan for eksempel være en matrise eller en multiplikasjon for å romme elementer av forskjellige typer.
  • ABS (nummer ) Roterer den absolutte verdien av et tall. For eksempel:

ABS (-123) Turn 123;

ABS (2 - 5) sving 3.

  • MO D (nummer1, nummer2 ) Vender overskuddet av heltallshalvdelen av det første tallet til det andre. For eksempel:

MOD (5, h) roter 2;

MOD (2, h) roter 0.

  • LN (nummer ) Roter den naturlige logaritmen til et tall.
  • EXP (tall) roterer tallet (Sett ut den naturlige logaritmen med graden av tall).
  • POWER (nummer1, nummer2 ) Sving nummer1 Nummer 2 (nummer 1 på trinn nummer 2).
  • SQRT (tall ) Snu kvadratroten av et tall.
  • ETASJE (nummer ) Roterer det største tallet som ikke overskrider verdien spesifisert av parameteren (avrundet ned). For eksempel:

GULV (5.123) Roter 5.0.

  • CEIL (nummer) eller CEILING (nummer ) Roterer det minste heltall som ikke er mindre enn parameteren avrunding oppover som er spesifisert). For eksempel:

CEIL (5.123) Roter 6. 0.

  • WIDTH_BUCKET (nummer1, tall2, tall3, tall4) roterer et helt tall i området mellom 0 og nummer4 + 1. Parameterne nummer2 og nummer3 spesifiserer en numerisk del, inndelinger med like intervaller, hvor nummeret er indikert med parameteren nummer 4. Funksjon Den tildeler nummeret til intervallet der verdiene går tapt nummer1. Hvis tallet 1 er i det gitte området, roterer funksjonen 0 eller tallet 4 + 1. For eksempel:

WIDTH_BUCKET(3.14; 0; 9; 5) Roterer 2.

Dato-time funksjoner

Movi SQL har tre funksjoner, som å rotere nøyaktig dato og time.

  • DAGENS DATO Roterer den nøyaktige datoen (skriv inn DATO).

For eksempel: 2005-06-18.

  • CURRENT_TIME (tall ) Roterer gjeldende time (TID-type). Heltallsparameteren indikerer nøyaktigheten til sekundene. For eksempel, hvis verdien er 2 sekunder, vil sekundene bli representert til nærmeste hundredeler (to sifre i brøkdelen):

12:39:45.27.

  • CURRENT_TIMESTAMP (tall ) Roterer dato og klokkeslett (TIDSTAMP-type). For eksempel, 2005-06-18 12:39:45.27. Heltallsparameteren indikerer nøyaktigheten til sekundene.

Vær oppmerksom på at datoen og klokkeslettet som disse funksjonene brukes til å rotere ikke er en symbolsk type. Hvis du trenger å mate dem i form av tegnrader, må du for dette formålet bruke konverteringsfunksjonen CAST ().

Funksjonene til dato-time er satt til å sitte fast i spørringene for innsetting, oppdatering og oppdatering av data. For eksempel, ved registrering av salg fra spesielle overføringer, angis nøyaktig dato og klokkeslett for dette formålet. Etter at du har nådd antallet poser for en måned eller et kvartal, kan salgsdata for den perioden slettes.

Beregnede uttrykk

Uttrykkene som beregnes vil være fra konstanter (numerisk, rad, logisk), funksjoner, feltnavn og andre typer data, koblet sammen med aritmetikk, rad, logiske og andre operatorer. På hver sin måte kan uttrykk kombineres med ekstra operatører av større lager (lager) uttrykk. For keruvana brukes runde armer i rekkefølgen nummerering av vicorer.

Logiske operatører OG, ELLER og IKKE-funksjoner har blitt sett på før.

Aritmetiske operatorer:

  • + | ytterligere;
  • - vidnіmannya;
  • * ¦ multiplikasjon;
  • / | Podil.

StrengeoperatorDet er bare én sammenkoblings- eller radsammenslåingsoperator (| |). I noen SQL-implementeringer (som Microsoft Access), brukes symbolet (+) i stedet for (| |). Sammenkoblingsoperatøren tildeler en annen rad til slutten av den første baken, slik:

"Sasha" | | "å elske" | | "Vinker"

Det viser seg at dette er resultatet av raden "Love Masha."

Ved bretting av uttrykk, sys sporet slik at operandene til operatorene er av små gyldige typer. For eksempel er uttrykket: 123 + "Sasha" uakseptabelt, så den aritmetiske operatoren legges til radoperanden.

Uttrykkene som beregnes kan finnes etter SELECT-setningen, så vel som i hodet til WHERE- og HAVI-setningene N.G.

La oss ta en titt på en haug med rumper.

La salgstabellen vise varer produkttype, kvantitet og pris, så må vi vite inntektene for hver type produkt. For å se listen over varer etter SELECT-setningen, slå på QUALITY*Price:

VELG Product_type, Quantity, Price, Quantity*Pris SOM

Sammen FRA Salg;

Her brukes nøkkelordet AS (yak) for å lage et alias for dataene som beregnes.

I fig. 10 viser utdatatabellen Salg og resultattabellen legges inn.

Liten 10. Resultatet er basert på beregning av inntekter for hudtype produkt

Hvis du trenger å vite den totale inntekten fra salg av alle produkter, er det nok å fylle ut følgende spørsmål:

VELG SUM (Antall*Pris) FRA Salg;

Det neste trinnet vil be deg om å plassere uttrykkene som blir beregnet både i listen over klausuler og i hodet til WHERE-setningen. Han velger fra tabellen salget av disse produktene, fortjenesten fra salget på mer enn 1000:

VELG Product_type, Mengde*Pris AS På en gang

FRA Salg

HVOR Antall*Pris > 1000;

Det er mulig du må lage en tabell som har to kolonner:

Produkt som samsvarer med produkttype og pris;

Sammen for å ta hevn på vitorgen.

Fragmentene overføres slik at i utdatatabellen har Sales-kolonnen en symbolsk type (CHAR-type), og Priskategorien er ? numerisk, når du slår sammen (liming) data fra disse kolonnene, er det nødvendig å konvertere den numeriske typen til en tegntype ved å bruke den ekstra CAST ()-funksjonen. På spørsmål, som avslutter denne oppgaven, ser det slik ut (fig. 11):

VELG produkttype | | " (Pris: " | | CAST(Pris AS CHAR(5)) | | ")" AS Vare, Mengde*Pris AS På en gang

FRA Salg;

Liten 11. Resultatet er kombinert med ulike typer data i én kolonne

Merk. I Microsoft Access ser en lignende kommando slik ut:

VELG Product_type + " (Pris: " + C Str (Pris) + ")" AS Produkt,

Antall*Pris AS På en gang

FRA Salg;

Intelligent uttrykk med CASE-operatøren

På grunnleggende språk er mentale overgangsoperatorer programmert, som lar deg kontrollere beregningsprosessen, avhengig av hva som skjer i tankene dine. I Movi SQL er denne operatoren CASE (vident, møblering, kopi). I SQL:2003 roterer denne operatøren verdier og kan også brukes på forskjellige språk. Vin har to hovedformer, som vi skal se på i denne delen.

CASE-uttalelse med verdier

CASE-setningen med verdier har følgende syntaks:

CASE checked_value

NÅR verdi1 SÅ resultat1

NÅR verdi2 SÅ resultat2

. . .

NÅR verdier N DÅ resultat N

ANDRE resultatX

U vipadku, hvis betyr at det må verifiseresén verdi1 , roterer CASE-operatøren verdier resultat1 , utsagn etter søkeordet THEN (det). Ellers er checked_value lik verdi2 , og hvis de er like, roteres verdien av resultat2. I det andre tilfellet er verdien som sjekkes lik gjeldende verdier spesifisert etter nøkkelordet WHEN, etc. Hvis verdien som sjekkes ikke er lik en av slike verdier, roteres verdien resultat X , instruksjoner etter nøkkelordet ELSE (ellers).

ELSE-nøkkelordet er ikke bindende. Når det er en verdi som utjevnes som ikke er lik verdien som verifiseres, roterer CASE-operatøren NULL.

Det er mulig at du, basert på klienttabellen (div. Fig. 1), må velge en tabell der navnene på regionene erstattes med kodenumrene deres. Siden utdatatabellen for forskjellige regioner ikke trenger å være rik, kan du for den beste definisjonen manuelt forkorte spørringen med CASE-setningen:

VELG navn, adresser,

CASE-regionen

NÅR "Moskva" SÅ "77"

NÅR "Tversk-regionen" SÅ "69"

. . .

ELSE Region

AS Regionkode

FRA klienter;

CASE-utsagnet er et hjernesøk

En annen form for CASE-setningen overfører søkeresultatet til tabellen med poster som tilfredsstiller det syngende sinnet:

SAK

NÅR sinn1 SÅ resultat1

NÅR resultat2 SÅ resultat2

. . .

NÅR sinn N SÅ resultat N

ANDRE resultatX

CASE-operatøren sjekker om den første posten i settet identifisert av WHERE-leddet, eller hele tabellen, om WHERE er gyldig. I så fall roterer CASE verdien av resultat1. Ellers, for hvis opptegnelse sinnet er sjekket2. Hvis det er sant, roteres det signifikante resultatet, osv. Hvis alle tanker ikke endres, roteres det signifikante resultatet. X , angitt etter ELSE-nøkkelordet.

ELSE-nøkkelordet er ikke bindende. Siden tankene ikke forandrer seg hver dag og hver dag, bryter CASE-operatøren NULL. Etter at operatøren som går inn i CASE går ut for den første oppføringen, blir overgangen til neste oppføring gjort. Dette vil fortsette til hele settet med poster er samlet.

For eksempel ender boktabellen (Tittel, Pris) med en NULL-verdi, siden det ikke er noen underbok. Den neste oppføringen roterer tabellen, der NULL vises teksten "Ingen":

VELG navn,

SAK

NÅR prisen ER NULL SÅ "Det er ikke åpenbart"

ANDEN CAST(Pris SOM CHAR(8))

AS Pris

FRA bøker;

Alle betydninger er de samme og samme type mor er skyldig. Derfor, i denne oppføringen, brukes CAST-typekonverteringsfunksjonen til å konvertere numeriske verdier til en symbolsk type.

Vær oppmerksom på at det å erstatte den første formen av CASE-erklæringen alltid kan brukes av en venn:

SAK

NÅR testet_verdi = verdi1 SÅ resultat1

NÅR testet_verdi = verdi2 SÅ resultat2

. . .

NÅR revidere verdi = verdi N SÅ resultat N

ANDRE resultater

NULLIF og COALESCE funksjoner

For en rekke problemer, spesielt ved forespørsler om oppdatering av data (UPDATE-operatør), er det enkelt å erstatte den tungvinte CASE-operatøren med de kompakte funksjonene NULLIF () (NULL) og COALESCE () (kombiner).

NULLIF funksjon ( verdi1, verdi2) roterer NULL hvis verdien til den første parameteren bekrefter verdien til en annen parameter; i tilfelle inkonsekvens, roteres verdien til den første parameteren uten endringer. Når likheten til verdi1 = verdi2 er lik, roterer funksjonen NULL, ellers verdien til verdi1.

Denne funksjonen tilsvarer CASE-setningen i to former:

  • CASE-verdi1

NÅR verdi2 SÅ NULL

ANDRE verdi1

  • SAK

NÅR verdi1 = verdi2 SÅ NULL

ANDRE verdi1

Funksjon COALESCE ( verdi1, verdi2, ... , verdi N) godtar en liste over verdier, som kan være enten signifikante eller ubetydelige (NULL). Denne funksjonen roterer alle verdier i listen eller NULL, siden alle verdier er udefinerte.

Denne funksjonen tilsvarer den avanserte CASE-setningen:

SAK

NÅR verdi 1 IKKE ER NULL, SÅ verdi 1

NÅR verdi 2 IKKE ER NULL, SÅ verdi 2

. . .

NÅR verdien N IKKE ER NULL, SÅ verdi N

ANNET NULL

Det er akseptabelt at i tabellen Bøker (tittel, pris) har Pris-kolonnen verdien NULL, siden det ikke er noen underbok. Den neste oppføringen gjør bordet til et annet sted NULL Teksten "Nei" vises:

SELECT Name, COALESCE (CAST(Price AS CHAR(8)),

"Det er ikke åpenbart") AS Price

FRA bøker;

Variasjonen av aritmetiske operatorer og beregningsmetoder er beskrevet. Subbag-funksjonene (aggregat) COUNT, SUM, AVG, MAX, MIN vurderes. Det er et eksempel på bruk av GROUP BY-operatøren til å gruppere datavalg. Stagnasjonen av proposisjonen HAVING er beskrevet.

Pobudova-beregningsfelt

På zagalny vipadku for døren telt (reisende) felt I SELECT-listen skriver du inn gjeldende SQL-språk. Disse uttrykkene inneholder aritmetiske operasjoner med addisjon, substitusjon, multiplikasjon og underseksjon, samt SQL-språkfunksjoner. Du kan spesifisere navnet på en hvilken som helst kolonne (felt) i tabellen eller spørringen, eller velge navnet på kolonnen i samme tabell eller spørring som spesifisert i listen over klausuler FRA i den spesifikke instruksjonen. Når foldefolder oppstår, kan det hende du trenger stenger.

SQL-standarder lar deg spesifisere navnene på kolonnene i resultattabellen som AS-frasen brukes for.

VELG Varenavn, Varepris, Varekvalitet, Varepris*Varekvalitet SOM Variasjon FRA Vare INNRE JOIN Vare PÅ Vare.Varekode=Vare.Varekode Rumpe 6.1. Rozrakhunok zagalnoy vartosti derzhannoi ugol.

Rumpe 6.2. Velg listen over selskaper fra de angitte navnene og initialene til kundene.

SELECT Company, Kallenavn+""+ Venstre(Navn,1)+"."+Venstre(Av Far,1)+"."SOM PIB FRA klient Rumpe 6.2. Velg listen over selskaper fra de angitte navnene og de første kundene.

Teksten har en innebygd Venstre-funksjon, som gjør at ett symbol på ondskap kan vises i teksten på et gitt tidspunkt.

Rumpe 6.3. Velg listen over produkter fra de angitte datoene og månedene for salg.

SELECT Item.Name, Year(Item.Date) AS Year, Month(Item.Date) AS Month FROM Item INNER JOIN Item ON Item.ItemCode=Item.ItemCode Rumpe 6.3. Velg listen over produkter fra angitte datoer og måneder for salg.

Søkemotoren har funksjonene År og Måned for å vise måned og dato.

Vikoristannaya pіdsumkovyh funksjoner

For ytterligere hjelp posefunksjoner (samlet). Innenfor SQL-spørringen kan du trekke ut en rekke ekstra statistisk informasjon om de valgte verdiene til utdatasettet.

Koristuvachevi tilgjengelig slike grunnleggende posefunksjoner:

  • Count (Viraz) - indikerer antall poster i utdatasettet med SQL-spørringer;
  • Min/Max (Viraz) - bestem den minste og høyeste verdien av det gitte feltet;
  • Avg (Viraz) - denne funksjonen lar deg utvide gjennomsnittsverdien til den upersonlige verdien som er lagret i sangfeltet til de valgte postene. Det er aritmetiske gjennomsnittsverdier, da. summen av verdien delt fra dens mengde.
  • Sum (Viraz) – beregner mengden upersonlig verdi som er plassert i sangfeltet til de valgte postene.

Oftest vises navnene på heltene som et symbol. Viraz kan beregnes i følgende tabell.

Alle disse funksjonene opererer med verdier i en enkelt tabellkolonne, eller med et aritmetisk uttrykk roterer de en enkelt verdi. COUNT-, MIN- og MAX-funksjonene er begrenset til både numeriske og ikke-numeriske felt, mens SUM- og AVG-funksjonene kun kan brukes for numeriske felt, bak COUNT(*)-flagget. Når du beregner resultatene av noen funksjoner, blir alle tomme verdier slått av, hvoretter den nødvendige operasjonen bare er begrenset til de spesifikke verdiene som gikk tapt. Alternativet COUNT(*) er en spesiell versjon av funksjonen vicarious COUNT, hvis formål er å dele inn alle rader i den resulterende tabellen, uavhengig av om tomme, dupliserte eller andre verdier er plassert der Nya.

Hvis du trenger å slå av verdiene som dupliseres før du kjører en annen funksjon, plasser nøkkelordet DISTINCT foran dem. Dette gir ingen mening for MIN- og MAX-funksjonene, men resultatet kan bli påvirket av resultatene av SUM- og AVG-funksjonene, som må tas i betraktning på forhånd, som kan være tilstede i et bestemt hudproblem. I tillegg kan DISTINCT-nøkkelordet ikke spesifiseres mer enn én gang i et søk.

Det er veldig viktig å merke seg det posefunksjoner De kan bare brukes i listen over forslag SELECT og i lageret med forslag HAVING. I andre situasjoner er dette uakseptabelt. Hvis listen over SELECT-klausulen skal ta hevn posefunksjoner, og i teksten er det en daglig frase GROUP BY, som vil sikre deling av data med gruppen, så fra elementene i listen over forslag kan SELECT ikke inkludere noen meldinger i feltene, på grunn av situasjonen, hvis feltene fungere som argumenter posefunksjoner.

Rumpe 6.4. Derfor er jeg nøye med å navngi produktet i alfabetisk rekkefølge.

VELG Min(produktnavn) AS Min_navn FRA produkt Rumpe 6.4. Navngi produktet først etter alfabetet.

Rumpe 6,5. Tenk på antall gleder.

SELECT Count(*) AS Antall varer FRA Vennligst Rumpe 6,5. Tenk på antall gleder.

Rumpe 6.6. Beregn det totale antallet solgte varer.

SELECT Sum(Pleasing.Quality) AS Quantity_of_product FROM Satisfaction Rumpe 6.6. Verdien av det totale antallet solgte varer.

Rumpe 6,7. Beregn gjennomsnittsprisen på det solgte produktet.

SELECT Avg(Product.Price) AS Avg_Price FROM Product INNER JOIN Varer PÅ Product.ProductCode=Product.ProductCode; Rumpe 6,7. Gjennomsnittlig pris på solgte varer.

SELECT Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Satisfaction ON Product.ProductCode=Purpose.ProductCode Rumpe 6,8. Pіdrakhunok varosti solgte varer.

Proposisjon GRUPPE AV

Ofte i spørringer er det nødvendig å lage de midlertidige posene, slik at uttrykket "kutan ..." vises i spørringen. Av denne grunn brukes GROUP BY-leddet i SELECT-setningen. Spørringen der GROUP BY er tilstede kalles spørringen som grupperer, fragmentene som dataene er gruppert i, fjernet som et resultat av den påfølgende SELECT-operasjonen, hvoretter en enkelt sammendragsrad opprettes for hver omkringliggende gruppe. SQL-standarden krever at SELECT-leddet og GROUP BY-leddet er nært knyttet til hverandre. På grunn av tilstedeværelsen i SELECT-setningen til GROUP BY-frasen, er listeelementet i SELECT-setningen ansvarlig for enkeltverdien for hele gruppen. I tillegg kan SELECT-setningen inkludere følgende typer elementer: feltnavn, posefunksjoner, konstanter og uttrykk som inkluderer kombinasjoner av overforsikringselementer.

Alle feltnavn plassert i listen over forslag SELECT må være tilstede i GROUP BY-klausulen - med forbehold om utkastelser, hvis navnet er vikorist i posefunksjoner. Den omvendte regelen er ikke rettferdig - GROUP BY-klausulen kan ha de samme klausulnavnene som de i listen over SELECT-klausuler.

Siden WHERE-leddet er kombinert med GROUP BY, kommer det først, og grupperingen blir fulgt av de radene som tilfredsstiller sinnet.

SQL-standarden sier at når gruppering utføres, behandles alle daglige verdier som like. Hvis to rader i tabellen i samme gruppekolonne inneholder NULL-verdier og identiske verdier i alle andre ugyldige gruppekolonner, plasseres de i samme gruppe.

Rumpe 6,9. Beregn gjennomsnittlig antall kjøp gjort av hver kjøper.

SELECT Client.Name, Avg(Pleasure.Quality) AS Average_quantity FROM Client INNER JOIN Vennligst PÅ Client.ClientCode=Pleasure.CustomerCode GRUPPE ETTER Client.Name Rumpe 6,9. Beregning av gjennomsnittlig antall kjøp gjort av hver kjøper.

Uttrykket "skin buyer" fant sitt uttrykk i SQL-spørringen i form av en proposisjon. GROUP BY Client.Name.

Rumpe 6.10. Betydelig nok ble et hudprodukt solgt til Yaku Sumu.

SELECT Product.Name, Sum(Product.Price*Purpose.Quality) AS Variety FROM Product INNER JOIN Produkt PÅ Product.ProductCode=Purpose.ProductCode GRUPPER ETTER Produkt.Navn Rumpe 6.10. I bytte ble et hudprodukt solgt til summen.

VELG Client.Company, Count(Purpose.Code) AS Antall klienter FRA Client INNER JOIN Client ON Client.ClientCode=Place.CustomerCode GRUPPE AV Client.Company Rumpe 6.11. Behandle en rekke ting laget av hudselskapet.

SELECT Client.Company, Sum(Purpose.Quality) AS Sales_Quality, Sum(Product.Price*Price.Quantity) AS Variety FROM Product INNER JOIN (Customer INNER JOIN Pleasant ON Client.ClientCode=U year.Client code) .Product code GROUP AV klient. Firma Rumpe 6.12. Pіdrakhunok zаgalї kіkostі kjøpt av huden selskapet til produktet og dets godhet.

Rumpe 6.13. Beregn den totale mengden hudprodukt per måned.

SELECT Product.Name, Month(Purpose.Date) AS Month, Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Tilfredshet PÅ Produkt.ProductCode=Purpose.ProductCode GRUPPER ETTER Produkt.Navn, Måned(Pris.Dato) ) ) Rumpe 6.13. Verdi av det totale salget av hudprodukter per måned.

Rumpe 6.14. Beregn den totale verdien av det første skinnproduktet per skinnmåned.

VELG Product.Name, Month(Price.Date) AS Month, Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Product ON Product.ProductCode=Price.ProductCode WHERE Product.Grade="First" GROUP BY Product. . .Navn, Måned(Vennligst.Dato) Rumpe 6.14. Verdien av den totale verdien av det første skinnproduktet per skinnmåned.

Forslag HA

Bak hjelpen til HAVING vises alle datablokker som er gruppert bak hjelpen til GROUP BY, som tilfredsstiller de gitte HAVING-sinnene. Det er mulig å filtrere utgangssettet.

Minds HAVING skiller seg fra sinn HVOR:

  • HAVING inkluderer grupper med resultatene av aggregerte verdier fra det resulterende datasettet;
  • WHERE inkluderer fra oppdelingen av samlede verdier en gruppert post som ikke tilfredsstiller sinnet;
  • På grunn av visdommen til WHERE, er det ikke mulig å angi aggregerte funksjoner.

Lager 6,15. Betydelig, antall selskaper hvis salg oversteg tre.

VELG Client.Company, Count(Purpose.Quality) AS Quantity FROM Client INNER JOIN Client ON Client.ClientCode=Pleasure.ClientCode GRUPPE AV Client.Company HAVING Count(pleasure.Quality yes)>3 Lager 6,15. Det betydelige antallet selskaper hvis antall interesser oversteg tre.

Rumpe 6.16. Skriv inn en liste over produkter solgt for over 10 000 rubler.

SELECT Product.Name, Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Product ON Product.ProductCode=Price.ProductCode GRUPPE ETTER Product.Name HAVING Sum(Product.Price*Price.Quality)>1000 Rumpe 6.16. Nedenfor er en liste over produkter som selges for over 10 000 kr.

Rumpe 6.17. Skriv inn en liste over produkter solgt for over 10 000 summer uten å spesifisere summen.

VELG produkt.navn FRA produkt INNER BLI MEDLEM PÅ Product.ProductCode=Purpose.ProductCode GRUPPER ETTER Produkt.Navn HAR Sum(Produkt.Pris*Pris.Antall)>10000 Rumpe 6.17. Det er en liste over produkter som selges i overkant av 10 000 uten angitt beløp.

Del med venner eller spar selv:

Vantaged...