sql înțelegere

6. SINTEZA DATELOR DE CĂTRE funcțiile agregate

În acest capitol, veți trece prin simpla utilizare de interogări pentru a extrage valori din baza de date și de a determina modul în care puteți utiliza aceste valori pentru a obține informații de la ei. Acest lucru se face cu ajutorul agregatului sau funcțiile generale care iau valori din grupul de podea și 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 de a combina valorile podelei cu informațiile primite într-o singură cerere.

CE ESTE funcțiile agregate?

Interogările pot produce valori de câmp grup generalizate la fel ca valoarea unui etaj. Acest lucru face cu ajutorul funcțiilor agregate. Funcții agregate produce o singură valoare pentru întregul grup de masă. Există o listă a acestor funcții:

* COUNT - produce numerele de linie sau de valori nenule ale câmpurilor că interogarea selectată.

* USM - produce suma aritmetică a tuturor valorilor selectate ale podelei.

* AVG - medie toate valorile selectate ale podelei.

* MAX - produce cea mai mare dintre toate valorile selectate ale podelei.

* MIN - produce cea mai mică dintre toate valorile selectate ale podelei.

Cum se utilizează funcțiile de agregate?

funcțiile agregate sunt folosite ca numele câmpurilor din clauza SELECT din interogare, dar cu o singură excepție, ei iau numele de podea ca argumente. Numai câmpurile numerice pot fi utilizate cu USM și AVG. Cu COUNT, MAX și MIN, pot fi folosite podea numerică sau caracter. Atunci când este utilizat cu câmpuri de caractere, MAX, MIN și le va traduce în ASCII echivalent, care trebuie să raporteze că va marca primul MIN, MAX și ultima valoare în ordine alfabetică (problema ordonare alfabetică este discutată mai detaliat în Capitolul 4).

Pentru a găsi suma tuturor achizițiilor noastre în ordinea mesei, putem intra în următoarea interogare, cu ieșire în Figura 6.1: Figura 6.1: Selectarea sumei

Aceasta, desigur, este diferit de câmpul de selecție la care returnează o singură valoare, indiferent de cât de multe rânduri sunt în tabel. Din acest motiv, funcția agregată, iar podeaua nu poate fi selectată la un moment dat, până când nu va fi utilizat GROUP BY de aprovizionare (descris în continuare). Găsirea suma medie - aceasta este similară cu operarea (ieșirea din această interogare este prezentată în figura 6.2): ​​Figura 6.2: Selectarea mijloc

SPECIALE COUNT ATRIBUTE

Funcția COUNT este ușor diferită de celelalte. Contorizează numărul de valori în această coloană, sau numărul de rânduri din tabel. Atunci când se constată o valoare a coloanei, este utilizat pentru a produce un număr de cont distinct de valori diferite în acest domeniu. Am putea folosi, de exemplu, pentru a contoriza numărul de vânzători este în prezent descrisă în ordinele de masă (de ieșire prezentată în figura 6.3):

UTILIZAREA distinctului

Observați în exemplul de mai sus că DISTINCT, urmată de numele podelei la care este aplicat, plasat între paranteze, dar nu imediat după SELECT, ca și mai înainte. Această utilizare DISTINCT cu COUNT aplicat coloane individuale, solicită standardul ANSI, dar multe programe nu le fac o astfel de cerință. Figura 6.3: Calcularea valorii podelei

Puteți selecta mai multe conturi (COUNT) ale câmpurilor folosind DISTINCT într-o singură cerere, care, așa cum am văzut în capitolul 3 nu sunt efectuate atunci când selectați un rând folosind distincți. DISTINCT poate fi folosit în acest fel, orice funcție a unității, dar cel mai frecvent este folosit cu COUNT. Cu MAX și MIN, pur și simplu nu va avea nici un efect, iar AVG și SUM, ați utilizat de obicei pentru a include valori duplicat, deoarece acestea sunt în mod legal valori totale și medii efective ale tuturor coloanelor.

UTILIZARE COUNT cu linii, nu valoarea

Pentru a calcula numărul total de rânduri în tabel, utilizați COUNT numele funcției cu un asterisc în loc de podea, cum ar fi în acest exemplu, ieșirea căruia este prezentată în Figura 6.4: COUNT cu un asterisc include NULL și duplicate distincte pentru acest motiv, nu poate fi folosit. DISTINCT poate produce un număr mai mare decât COUNT podea specială, ceea ce elimină toate 6. Figura 4: Calculul rânduri în loc de valori

line cu date redundante sau NULL în acest domeniu. DISTINCT nu se aplică c COUNT (*), deoarece nu are nici un efect într-un bine dezvoltat și întreținut de către baza de date. În această bază de date, nu trebuie să existe astfel de linii, care ar constitui o complet gol sau duplicate (primul nu conține niciun fel de date, iar ultimul complet redundant). În cazul în care, pe de altă parte, există încă complet gol sau o linie redundante, probabil nu doriți să contorizați ascund aceste informații.

TRANSFORMAREA duplicate în funcțiile agregate

Funcții agregate pot, de asemenea, (în cele mai multe implementari) folosesc argumentul ALL, care este plasat înainte de numele de podea, 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 sunt utilizate cu COUNT -

* ALL numele_campului folosește ca argument.

* ALL nu poate conta valori NULL.

* Atâta timp cât un singur argument, care include valori NULL, și este utilizat numai cu COUNT; altele decât COUNT funcții ignoră valorile NULL, în orice caz. Numărul următor numărului de comandă (COUNT) de valori nu-NULL în câmpul de rating în tabelul de clienți (inclusiv repetiții):

UNITĂȚI Construit pe o expresie scalar

Înainte, ați utilizat pentru funcțiile agregate cu câmpuri unice ca argument. Puteți utiliza, de asemenea funcții agregate cu argumente care constau în exprimarea scalar include una sau mai multe câmpuri. (Dacă faceți acest lucru, DISTINCT nu este permis.) Să presupunem că tabela are ordine de o coloană care stochează soldul precedent (câmpul blnc) pentru fiecare client. Trebuie să găsească soldul curent, 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 din tabel, această interogare va adăuga blnc și amt pentru acest client și să aleagă cea mai mare valoare pe care le găsește. Desigur, atâta timp cât clienții pot avea mai multe comenzi, soldul 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 în interogarea de mai sus. De fapt, există un număr mare de situații în SQL unde puteți utiliza expresii cu câmpuri scalare sau câmpuri în schimb, veți vedea acest lucru î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 celălalt sex, și se aplică funcțiile agregate la un subset. Acest lucru vă oferă posibilitatea de a combina sexul și funcțiile agregate într-o singură frază SELECT. De exemplu, să presupunem că doriți să găsiți cea mai mare cantitate de câștiguri obținute de fiecare furnizor. Puteți face o cerere separată pentru fiecare dintre ele de MAX (AMT) a tabelului Comenzi pentru fiecare valoare a snum sex. GROUP BY, cu toate acestea, vă permit să le pună într-o singură comandă: Ieșirea pentru această interogare este prezentată în figura 6.5. Figura 6.5: Găsirea prețul maxim de vânzare pentru fiecare vânzător

GROUP BY se aplică funcțiile agregate, indiferent de serii de grupuri sunt determinate utilizând valorile câmpului în general. În acest caz, fiecare grup format din toate rândurile cu aceeași valoare a snum podelei și funcția MAX este aplicată separat pentru fiecare grup. Această valoare câmp, la care GROUP BY, are, prin definiție, o singură valoare pentru grupul de ieșire, deoarece face funcția agregată. Rezultatul este că compatibilitatea permite unităților și câmpuri combinate în acest mod. Puteți utiliza, de asemenea GROUP BY cu mai multe câmpuri. Perfecțiunea exemplul de mai sus în continuare, să presupunem că doriți să vedeți cea mai mare cantitate de achiziții primite de fiecare furnizor în fiecare zi. Pentru a face acest lucru, ar trebui să fie grupate în ordine tabel cu data de vânzători și de a aplica funcția MAX pentru fiecare astfel de grup, astfel: Ieșirea pentru această interogare este prezentată în figura 6.6. Figura 6.6: Găsirea cea mai mare cantitate de achiziții pe zi

Desigur, grupul gol, î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 dori să vedeți numai 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 poți face ceva de genul: Va fi 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 utilizate pentru a elimina anumite grupuri din O, la fel ca și clauza WHERE face pentru liniile individuale. Comanda corectă este după cum urmează: Ieșirea pentru această solicitare este prezentată în figura 6. 6. 7. Figura 7: Eliminarea grupurilor de valori agregate

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 în ce zi a avut cea mai mare sumă de achiziții. Dacă încercați să faceți acest lucru, atunci echipa ta va fi probabil respinsă. (Unele implementări nu impun această restricție, ceea ce este avantajos, deoarece agregatele imbricate pot fi foarte utile, chiar dacă acestea sunt oarecum problematice.) În comanda de mai sus, de exemplu, USM urmează să fie aplicat fiecărui sex în grup Odate, și MAX la toate grupurile, producând o singură valoare pentru toate grupurile. Cu toate acestea, o clauză GROUP BY implică faptul că trebuie să existe o linie de ieșire pentru fiecare sex in 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ă urmăriți pentru anumite informații, dacă aveți posibilitatea să formuleze 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 o anumită perioadă de timp după modificarea acestuia. Acest lucru nu ar trebui să sugereze că funcțiile agregate pot înlocui complet necesitatea de a urmări informații, cum ar fi acest exemplu. Puteți folosi aceste unități pentru valorile anumitor grupuri oferă GROUP BY. Aceste grupuri au valoarea câmpului în ansamblul său, și poate locui în cadrul altor grupuri care au valoarea câmpului în ansamblu. În același timp, încă în uz predicate pentru a determina care rânduri de funcția agregată de a aplica. Luate împreună, aceste caracteristici fac posibilă producerea de unități pe baza subseturi foarte specifice ale valorilor din domeniu. Apoi, puteți stabili alte condiții pentru excluderea anumitor grupuri de rezultate cu o propunere HAVING. Acum. Când vei deveni un expert într-un număr mare de cererii produce valori, vă vom arăta în capitolul 7, unele lucruri pe care le puteți face cu valorile pe care le produce.

cu SQL

2. Scrieti o interogare care ar conta numărul de diferite nenulă oraș podea valori în tabelul de clienți.

3. Scrieti o interogare care ar alege cea mai mică sumă pentru fiecare client.

4. Scrieti o interogare care va fi selectat de către client, în ordine alfabetică, ale căror nume începe cu litera G.

5. Scrieti o interogare care va selecta cel mai mare scor în fiecare oraș.

6. Scrieti o interogare care va conta numărul de clienți se înregistrează în fiecare zi a comenzilor lor. (În cazul în care vânzătorul are mai mult de o comandă pe o anumită zi, trebuie să se ia în considerare doar o singură dată.)