Integrarea sql de date prin utilizarea funcțiilor agregate

  • DATE REZUMAT SQL BY funcțiile agregate

    În acest capitol, veți trece pe ușor interogări de utilizare pentru a extrage valoarea din baza de date (DB), și de a determina modul în care aceste valori pot fi folosite pentru a obține informații de la ei. Acest lucru se face cu ajutorul agregat (generalizatoare) funcții care iau valori din grupul de domenii și de a le reduce la o singură valoare.
    Vei învăța cum să folosească aceste funcții, cum se determină valorile grupului la care vor fi aplicate și modul de a determina care grupuri sunt selectate pentru ieșire.
    Veți vedea, de asemenea, condițiile în care va fi capabil să combine valoarea câmpului informațiilor primite într-o singură interogare.

    CE ESTE funcțiile agregate?

    Interogările pot produce valori de câmp grup generalizate în același mod ca și valoarea unui câmp. Acest lucru se face prin utilizarea funcțiilor agregate. Funcții agregate produce o singură valoare pentru întregul grup de masă.

    Aici este o listă a acestor funcții:

    COUNT dă numărul de rânduri sau valori de câmp nenul de cerere selectat. USM produce o sumă aritmetică a tuturor valorilor selectate din teren. AVG dă o medie toate valorile selectate din teren. MAX oferă cea mai mare dintre toate valorile selectate din teren. MIN oferă cea mai mică dintre toate valorile selectate din teren.

    Cum se utilizează funcțiile de agregate?

    funcțiile agregate sunt utilizate, cum ar fi numele câmpurilor din interogare SELECT-clauza, dar cu o singură excepție: acestea iau nume de câmpuri ca argumente.

    Numai câmpurile numerice pot fi utilizate cu USM și AVG.

    Deoarece funcțiile COUNT, MAX și MIN pot fi utilizate, iar câmpurile numerice și de caractere.
    Atunci când este utilizat cu câmpurile de caractere, MAX și MIN le va traduce în ASCII echivalent, care informează că MIN va însemna prima și ultima valoare MAX în ordine alfabetică (ordonarea alfabetică este discutată mai detaliat în Capitolul 4).

    Pentru a găsi suma tuturor achizițiilor noastre în tabelul de comenzi, putem intra în următoarea interogare, cu ieșire în figura 6.1:

    Aceasta, desigur, diferit de câmpul de selecție la care returnează o singură valoare, indiferent de cât de multe linii stocate în tabel. Din cauza acestui domeniu și funcțiile agregate nu pot fi selectate simultan, în cazul în care oferta nu este utilizat GROUP BY (descris în continuare).

    Găsirea valoare medie - operațiune ca și (ieșire din această interogare este prezentată în figura 6.2):

    Un atribut special COUNT

    Funcția COUNT este ușor diferită de toate celelalte. Contorizează numărul de valori din numărul coloanei sau rând din tabel. Atunci când se constată o valoare a coloanei, este utilizat cu DISTINCT, contul numere pentru a produce valori diferite în acest domeniu. Am putea folosi, de exemplu, pentru a contoriza numărul de vânzători, așa cum este descris în prezent în tabelul de ordine de (de ieșire prezentată în figura 6.3):

    UTILIZAREA distinctului

    Observați în exemplul de mai sus că DISTINCT, urmată de numele câmpului la care este aplicat, plasat între paranteze, dar nu imediat după SELECT, ca și mai înainte. O astfel de utilizare DISTINCT COUNT, aplicate pe coloane individuale, care necesită ANSI standard, dar multe programe nu impun o astfel de cerință.

    Puteți efectua mai multe numarare (COUNT) în domeniile folosind DISTINCT într-o singură cerere, care, așa cum am văzut în capitolul 3 nu a fost efectuată, atunci când selectați un rând folosind distincți.
    DISTINCT poate fi folosit în acest fel cu orice funcție agregată, dar cel mai adesea este folosit cu COUNT. Cu MAX și MIN doar nu va avea nici un efect, și suma și AVG, ați utilizat de obicei pentru a include valori duplicate, deoarece acestea sunt valori generale și medii mai eficientă a tuturor coloanelor.

    UTILIZARE COUNT cu linii, nu valoarea

    Pentru a calcula numărul total de rânduri în tabel, folosiți funcția COUNT cu un asterisc în locul numelui câmpului, ca în acest exemplu, ieșirea căruia este prezentată în figura 6.4:

    COUNT cu un asterisc include NULL, și duplicate; Din acest motiv, DISTINCT nu poate fi folosit. DISTINCT poate produce un număr mai mare decât COUNT domeniu special, care elimină toate

    line cu date redundante sau NULL în acest domeniu. DISTINCT nu se aplică c COUNT (*), deoarece nu are nici un efect într-o bază de date bine dezvoltate și întreținute. Într-o astfel o bază de date ar trebui să fie nici o astfel de linii, care ar constitui o complet gol sau duplicate (primul nu conține niciun fel de date, iar ultimul complet redundant). Dacă încă linie complet goale sau redundante, probabil nu doriți să contorizați ascund aceste informații.

    TRANSFORMAREA duplicate în funcțiile agregate

    funcțiile agregate pot fi, de asemenea (în majoritatea implementărilor) folosit argumentul ALL, care este plasat înainte de numele câmpului, cum ar fi DISTINCT, dar înseamnă opusul, includ duplicate. ANSI punct de vedere tehnic nu permite să COUNT, dar multe implementari se pot relaxa această restricție.

    Diferențele între toate și * atunci când este utilizat cu COUNT:

    • ALL utilizează numele câmpului ca argument.
    • ALL nu se poate calcula NULL valori.

    * Atâta timp cât un singur argument care include NULL-valori, și este utilizat numai cu COUNT; funcții cu excepția COUNT, ignora NULL valori, în orice caz.

    Numărul următor numărului de comandă (COUNT) de non-valori NULL în câmpul de rating în tabelul de clienți (inclusiv repetiții):

    UNITĂȚI, construit pe o expresie scalar

    Înainte de faptul că ați utilizat funcții agregate cu domenii singulare, ca un argument. Puteți utiliza, de asemenea funcții agregate cu argumente, care sunt compuse din expresii scalare, inclusiv unul sau mai multe câmpuri. (Dacă faci acest lucru, DISTINCT nu este permis.)

    Să presupunem că tabelul de ordine de mai are un singur coloană care stochează soldul precedent (câmpul blnc) pentru fiecare client. Trebuie să găsească soldul curent prin adăugarea de achiziții se ridică la soldul precedent.

    Puteți găsi echilibrul cele mai remarcabile, după cum urmează:

    Pentru fiecare rând de tabel va stoca cererea și Amt blnc pentru acest client și să aleagă cea mai mare valoare pe care o găsește. Desigur, atâta timp cât clienții pot avea mai multe ordine de sold restant lor este evaluat separat pentru fiecare comandă. Pot comanda o dată ulterioară ar fi cel mai mare sold restant. În caz contrar, soldul vechi trebuie să fie selectat ca interogarea de mai sus.

    De fapt, există un număr mare de situații cu SQL, unde puteți utiliza câmpurile scalare sau expresii în loc de câmpuri, după cum veți vedea în Capitolul 7.

    Clauză GROUP BY

    Clauza GROUP BY vă permite să definiți un subset al valorilor dintr-un anumit domeniu în ceea ce privește celelalte domenii, precum și de a aplica funcția agregată la un subset. Acest lucru face posibil să se combine câmpuri și funcții agregate într-o singură frază SELECT.

    De exemplu, să presupunem că doriți să găsiți cea mai mare cantitate de vânzări câștigate de fiecare furnizor. Puteți face o cerere separată pentru fiecare dintre ele de MAX (AMT) din tabelul de comenzi pentru fiecare valoare a câmpului snum. GROUP BY, cu toate acestea, vă permit să pune totul într-o singură comandă:

    Ieșirea pentru această interogare este prezentată în figura 6.5.

    GROUP BY se aplică funcțiile agregate, indiferent de seria de grupuri care sunt definite de către câmpul de valoare ca întreg. În acest caz, fiecare grup format din toate rândurile cu aceeași valoare a câmpului snum și funcția MAX este aplicată separat pentru fiecare grup. Această valoare a câmpului la care GROUP BY, are, prin definiție, o singură valoare pe grupul de ieșire în același mod ca și face funcția agregată. Rezultatul este compatibilitatea care permite unităților și câmpuri combinate în acest mod.

    Puteți utiliza, de asemenea GROUP BY cu mai multe câmpuri. Îmbunătățirea exemplul de mai sus, să presupunem că doriți să vedeți cea mai mare cantitate de vânzări, vânzătorul primește fiecare în fiecare zi. Pentru a face acest lucru, trebuie să grupăm tabelul de comenzi de data și vânzători utiliza funcția MAX pentru fiecare astfel de grup:

    Ieșirea pentru această interogare este prezentată în figura 6.6.

    Desigur, grupuri goale în zilele în care distribuitorul de curent a avut nici o ordine nu va fi afișat în ieșire.

    HAVING

    Să presupunem că în exemplul anterior, ați vedea doar valoarea maximă a achizițiilor a căror valoare este de peste $ 3000.00. Nu puteți utiliza funcțiile agregate într-o propoziție unde (dacă nu utilizați un subinterogare, descris mai târziu), pentru că predicatele sunt evaluate în ceea ce privește o singură linie, și funcțiile agregate sunt evaluate în ceea ce privește grupurile de rânduri. Acest lucru înseamnă că nu va fi capabil să facă ceva de genul următoarele:

    Aceasta este o abatere de la interpretarea strictă a ANSI. Pentru a vedea costul maxim al unei achiziții de peste $ 3000.00, puteți utiliza clauza HAVING.

    HAVING precizează criteriile care trebuie utilizate pentru a elimina anumite grupuri de ieșire în același mod ca și clauza WHERE se face pentru linii individuale.

    Corectă comanda va fi:

    Ieșirea pentru această solicitare este prezentată în figura 6. 7.

    Argumentele în clauza HAVING să urmeze aceleași reguli ca și în clauza SELECT, format din echipe, folosind GROUP BY. Acestea ar trebui să aibă aceeași valoare în grupul de ieșire.

    Următoarea comandă va fi interzisă:

    câmp Odate nu pot fi cauzate de proprietate HAVING, deoarece poate avea (și are) mai mult de o valoare într-un grup de ieșire. Pentru a evita o astfel de situație, teza HAVING ar trebui să se refere numai la unitățile și domeniul selectat GROUP BY. Există un mod corect de a face interogarea de mai sus (de ieșire prezentată în figura 6.8):

    Așa cum am menționat anterior, având pot utiliza numai argumente care au aceeași valoare pe grupul de ieșire. Aproape o trimitere la funcțiile agregate - cea mai frecventă, dar, de asemenea, domeniul selectat cu GROUP BY, sunt de asemenea posibile. De exemplu, vrem să vedem cele mai mari comenzi de Serres și Rifkin:

    Ieșirea pentru această interogare este prezentată în figura 6.9.

    DO UNITĂȚI ASOCIATE NU

    Interpretarea strictă a ANSI SQL, nu puteți utiliza unitatea mașinii. Să presupunem că doriți să aflați ce zi a avut cea mai mare cantitate de vânzări. Dacă încercați să faceți acest lucru,

    atunci echipa ta este probabil să fie respins. (. Unele implementări nu impun această restricție, ceea ce este benefic, deoarece agregatele imbricate pot fi foarte utile, chiar dacă acestea sunt oarecum problematice) În comanda de mai sus, de exemplu, suma ar trebui să fie aplicat fiecărui grup de câmp Odate, și MAX - la toate grupurile, producând o singură valoare pentru toate grupurile. Cu toate acestea, o clauză GROUP BY presupune că ar trebui să existe o linie de ieșire pentru fiecare domeniu de grup Odate.

    În prezent, utilizați cereri oarecum diferit. Capacitatea de a primi, nu doar o valoare plasa, este foarte puternic. Acest lucru înseamnă că nu trebuie să țină evidența anumitor informații, în cazul în care puteți formula interogarea pentru ao obține. Interogarea va da minut cu rezultate minut, în timp ce masa este valorile totale sau medii va fi bun doar pentru un timp după modificarea acesteia. Acest lucru nu ar trebui să sugereze că funcțiile agregate pot înlocui complet necesitatea de a urmări informații, cum ar fi, de exemplu, ca aceasta.

    Puteți folosi aceste unități pentru valorile grupurilor, propuneri specifice GROUP BY. Aceste grupuri au valoarea câmpului, în general, și pot locui în cadrul altor grupuri care au valoarea câmpului în ansamblu. În același timp, mai multe predicate sunt utilizate pentru a determina care rânduri de funcția agregată de a aplica.

    Luate împreună, aceste caracteristici fac posibilă producerea de agregate, pe baza unor subseturi bine definite de valori în domeniu. Apoi, puteți stabili alte condiții pentru excluderea anumitor grupuri de rezultate cu o propunere HAVING.

    Acum, că ați devenit un expert în interogarea produce o valoare, vă vom arăta în capitolul 7, Joi # x0301, despre ceea ce se poate face cu valorile pe care le produce.

    OPERARE CU SQL

    articole similare